剑指 Offer II 010. 和为 k 的子数组

## 剑指 Offer II 010. 和为 k 的子数组

给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2
解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
示例2:
输入:nums = [1,2,3], k = 3
输出: 2
提示:

1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000

-107 <= k <= 107
class Solution {
     
public:
    int subarraySum(vector<int>& nums, int k) {
     
        int  n =  nums.size();//nums数组的大小
        if( n == 0) return 0;
        unordered_map<int,int> map;//把前缀和以及这个和出现的次数作为键值对存入哈希表中。
        map[0] = 1;//初始化和为0的次数为1.即空数组。
        int sum = 0;
        int count = 0;
        for( int& num:nums)//num遍历nums
        {
     
            sum+=num;
            count+=map[sum-k];//前i个元素和为sum,若在小于i的索引中,存在j 即j
            map[sum]++;//存入前缀和
        }
        
        return count;

    }
};

你可能感兴趣的:(刷题笔记,哈希算法,算法,数据结构,哈希表)