暴力
// class Solution {
// public:
// int subarraySum(vector<int>& nums, int k) {
// int n=nums.size();
// //以i开头
// int res=0;
// for(int i=0;i<n;i++){
// int sum=0;
// for(int j=i;j<n;j++){
// sum+=nums[j];
// cout<<sum<<endl;
// if(sum==k) res+=1;
// }
// }
// return res;
// }
// };
后缀和
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n=nums.size();
//以i开头
int suffix=0;
int res=0;
map<int,int> mp;
mp[0]=1;// 这个是重点,以[1,1,1] k=2
for(int i=n-1;i>=0;i--){
suffix+=nums[i];
// cout<<suffix<<endl;
if(mp.find(suffix-k)!=mp.end()) res+=mp[suffix-k];
mp[suffix]++;//放在if 后边,放在if前测试[1],k=0 无法通过
}
return res;
}
};
560. 和为K的子数组(前后缀+哈希)
猜你喜欢
转载自blog.csdn.net/qq_38662930/article/details/107919823
今日推荐
周排行