cpp
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int,int>mp;
mp[0]=1;
int count=0,pre=0;
for(auto& x:nums){
pre+=x;
if(mp.find(pre-k)!=mp.end()){
count+=mp[pre-k];
}
mp[pre]++;
}
return count;
}
};
一个超级好的思路,pre表示前缀和,每次把前缀和放进去,如果当前前缀和pre-k可以在前面的前缀和中找到,就说明它们之间的一段和为k,非常牛逼的思路。
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
一开始想暴力枚举区间结果超时了。