class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
//前缀和+哈希
int sum[nums.size()+1]; //sum[i] = sum[i-1] + nums[i-1];
// 如果子数组[i..j-1]的和为K,则s[i] = s[j] - k; 当遍历到s[j]时只需要知道前面有多少个s[j] - k,就有多少个子数组
sum[0]=0;
int result=0;
unordered_map<int,int> hash;
hash[0]=1;
for(int i=1;i<=nums.size();i++){
sum[i] = sum[i-1] + nums[i-1];
hash[sum[i]]++;
if(hash.count(sum[i]-k)!=0)
result+=hash[sum[i]-k];
}
return result;
}
};