560. 和为 K 的子数组(前缀和 + 哈希表)
这道题的思路就是:
前缀和的差值可以表示一个区间内的元素的总和。
所以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;}
};