和为K的数组
分析
其实也比较好想,因为要求的是连续的子数组。所以就是要求某两个前缀和相减=k,其实即使presum[i]-presum[j]=k,可以看作是presum[i]-k=presum[j],所以枚举一下前缀就出来了。
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
map<long long, int >mp;
long long sum = 0;
int ans = 0;
mp[0] = 1;
for (int c : nums) {
sum += c;
if (mp.find(sum - k) != mp.end()) {
ans += mp[sum - k];
}
mp[sum]++;
}
return ans;
}
};