560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
不能用滑动窗口,因为整数 k 可以是负数
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> mp; //哈希表mp,以和为键,出现次数为对应的值
mp[0] = 1; // 需要预先添加这个,因为可能有单个元素的值就等于k了
int count = 0, pre = 0;
for(auto& n : nums)
{
pre += n;
if(mp.find(pre-k) != mp.end())
count += mp[pre-k];
mp[pre]++;
}
return count;
}
};