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)官网 - 全球极客挚爱的技术成长平台
一开始想暴力枚举区间结果超时了。