image.png
需要处理一个特殊前缀和(即-1位置对应的前缀和为0,直接设置map[0]=1即可),在添加sums进map之前需要计算该点之前有多少点满足到该点的和为k。map存储前缀和key对应的点个数。
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int,int>m;
int sums=0;
int counts=0;
m[0]=1;
for(int i=0;i<nums.size();i++){
sums+=nums[i];
if(m.count(sums-k)){
counts+=m[sums-k];
}
m[sums]++;
}
return counts;
}
};
网友评论