560. 和为 K 的子数组(前缀和 + 哈希表)

560. 和为 K 的子数组(前缀和 + 哈希表)_第1张图片
这道题的思路就是:
前缀和的差值可以表示一个区间内的元素的总和。
所以index1处的前缀和如果为sum,那么前面只要出现过 k - sum 的前缀和就表示,有和为k的子数组存在。
因为,sum - (sum - k)= k

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        map<int, int> m;
        
        int ans = 0;
        int pre = nums[0];
        m[pre]++;

        if(m.count(k)) ans ++;

        for(int i = 1; i < nums.size(); i ++) {
           ans += m[pre + nums[i] - k];
           if(pre + nums[i] == k) ans ++;
           m[pre + nums[i]] ++;
           pre += nums[i];
        }
        return ans;
    }
};

你可能感兴趣的:(力扣,散列表,算法,数据结构)