题目链接:
https://leetcode.com/problems/subarray-sum-equals-k/description/
题解:
先一个For过去,记录下每次前缀和的出现的次数。对于查找第K大的,那么只要对于当前的前缀和,找到其减去K之后数字,它出现的次数,加一下就行了。因为对于当前数列的前缀和,他一定是从1到N,所以减掉K之后,一定是满足连续的这个条件的。
代码:
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
map<int,int> mp;
int ans=0,cnt=0;
mp[0]++;
for(int i=0;i<nums.size();i++)
{
ans+=nums[i];
cnt+=mp[ans-k];
// 如果出现,肯定是在这个数之前出现的
mp[ans]++;
}
return cnt;
}
};