题目
力扣
思路 前缀和+哈希表
遍历数组,计算前缀和,把前缀和以及该前缀和出现的次数存入哈希表。如果发现哈希表中有前缀和等于sum-k,就cnt+=map[sum-k]。注意前缀和为0的情况,要初始化map[0]=1.
代码
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int sum=0,cnt=0;
unordered_map<int,int> map;
map[0]=1;
for(int num:nums){
sum+=num;
if(map.find(sum-k)!=map.end())
cnt+=map[sum-k];
map[sum]++;
}
return cnt;
}
};