题目链接:
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;
}
};
LeetCode子数组和等于K

本文介绍了解决LeetCode上“子数组和等于K”问题的一种高效算法。该算法通过记录前缀和的出现次数,并利用哈希映射来快速查找目标值,实现了O(n)的时间复杂度。
776

被折叠的 条评论
为什么被折叠?



