这道题的思路就是:
前缀和的差值可以表示一个区间内的元素的总和。
所以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;
}
};