前缀和,找出所有以前前缀和的值为当前前缀和-k的 。这样复杂度o(n^2)。优化一下,用哈希表记录之前每个前缀和值的个数,只要看当前前缀和-k的个数。
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n=nums.size();
if(n==0)
return 0;
vector<int> sum(n,0);
sum[0]=nums[0];
for(int i=1;i<n;i++){
sum[i]=sum[i-1]+nums[i];
}
int ans=0;
unordered_map<int,int> record;
record[0]=1;
for(int i=0;i<n;i++){
int target=sum[i]-k;
if(record.count(target)!=0){
ans+=record[target];
}
record[sum[i]]++;
}
return ans;
}
};