题目
题解
- 前缀和 两种不同叠加顺序
- 前缀和优化,利用哈希表
若[j…i]区间和为k,则sum[j-1]=sum[i]-k
每当计算到位置i的前缀和,查找前面是否有sum[i]-k的前缀和
https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/he-wei-kde-zi-shu-zu-by-leetcode-solution/
代码
// class Solution {
// public:
// int subarraySum(vector<int>& nums, int k) {
// int cnt=0;
// for(int i=0;i<nums.size();i++){
// int sum=0;
// for(int j=i;j<nums.size();j++){
// sum=sum+nums[j];
// if(sum==k)
// cnt++;
// }
// }
// return cnt;
// }
// };
//前缀和
// class Solution {
// public:
// int subarraySum(vector<int>& nums, int k) {
// int count = 0;
// for (int start = 0; start < nums.size(); ++start) {
// int sum = 0;
// for (int end = start; end >= 0; --end) {
// sum += nums[end];
// if (sum == k) {
// count++;
// }
// }
// }
// return count;
// }
// };
//前缀和优化
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int cnt=0;
int sum=0;
unordered_map<int, int> haxi;
haxi[0]=1;
for(int i=0;i<nums.size();i++){
sum+=nums[i];
if(haxi.find(sum-k)!=haxi.end());
cnt+=haxi[sum-k];
haxi[sum]++;
}
return cnt;
}
};