class Solution {
public:
int subarraySum(vector<int>& a, int k) {
int n = a.size();
auto s = vector<int>(n+1,0);
for(int i=1;i<=n;++i){
s[i] = s[i-1] + a[i-1];
}
int ans=0;
for(int i=1;i<=n;++i){
for(int j=0;j<i;++j){
if( s[i]-s[j]==k ){
++ans;
}
}
}
return ans;
}
};

【LeetCode】560. 和为 K 的子数组 【hash】【前缀和】_哈希算法

hash map 优化前缀和

class Solution {
public:
int subarraySum(vector<int>& a, int k) {
int ans = 0;
unordered_map<int,int> h;
int sum = 0;
h[0] = 1;

for(int i:a){
sum += i;
if( h.count(sum-k) > 0){
ans += h[ sum-k];
}
++h[ sum ];
}
return ans;
}
};

【LeetCode】560. 和为 K 的子数组 【hash】【前缀和】_散列表_02