题目链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/
前缀和 + 枚举
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n = nums.size();
vector<int> sums(n + 1, 0);
for(int i = 0 ; i < n; i++)
sums[i + 1] = sums[i] + nums[i];
for(int i = 0; i < n + 1; i++)
cout << sums[i] << " ";
cout << endl;
int cnt = 0;
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n + 1; j++)
{
int val = sums[j] - sums[i];
if(val == k) cnt++;
}
}
return cnt;
}
};
前缀和 + 哈希 优化
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n = nums.size();
int cnt = 0;
int sum = 0;
unordered_map<int, int> hashmap;
hashmap[0] = 1;
for(int i = 0; i < n; i++)
{
sum += nums[i];
if(hashmap[sum - k]) cnt += hashmap[sum - k];
hashmap[sum]++;
}
return cnt;
}
};