• 560.和为K的子数组


    题目

    给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

    示例 1 :

    输入:nums = [1,1,1], k = 2
    输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

    说明 :

    数组的长度为 [1, 20,000]。
    数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

    分析

    记sum[i]为下标为0到i的元素之和,那么任意子数组元素之和都可以通过sum[m]-sum[n]的形式求出。遍历数组,将累计的sum加入到HashMap,当遍历第i个位置时,若HashMap中存在sum[j]=k-sum[i],则说明子数组[j+1...i]元素和为k。

    代码

       public int subarraySum(int[] nums, int k) {
            int count=0,n=nums.length,s=0;
            //Key为sum[j],Value为sum[j]出现的次数
            HashMap<Integer,Integer> map=new HashMap<>();
            //因为有可能刚好sum[i]=k
            map.put(s,1);
            for(int i=0;i<n;++i){
                s+=nums[i];
                //如果sum[j]=sum[i]-k,则[j+1...i]和为k
                if(map.containsKey(s-k)) count+=map.get(s-k);
                //将sum[i]加入到HashMap
                if(map.containsKey(s)) map.put(s,map.get(s)+1);
                else map.put(s,1);
            }
            return count;
        }
    

    原题链接:https://leetcode-cn.com/problems/subarray-sum-equals-k

  • 相关阅读:
    C++ CheckListBox
    TreeView查获节点并选中节点
    创建文件自动重命名
    bat
    Edit显示行号
    FindStringExact
    Extended ComboBox添加图标
    C++ Combobox输入时自动完成
    C++ ComboBox基础
    C++ Code_combobox
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/14176517.html
Copyright © 2020-2023  润新知