【LeetCode】560. 和为 K 的子数组
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n=nums.size();
int presum[20010]={0};
unordered_map<int,int> mp;
mp[0]=1; //前n项和0,出现次数为1次
int ans = 0;
for(int i=1;i<=n;++i)
{
presum[i]=presum[i-1]+nums[i-1]; //计算前缀和
ans+=mp[presum[i]-k]; //去已经存入哈希表的前面的元素中寻找子连续数组
++mp[presum[i]]; //哈希表里面存储的是前n项和出现的次数
}
return ans;
}
};
O(n)做法:记录前缀和,0项指全部为空,只有一种取法。其他细节见代码和注释。
分类:
【2022刷题】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通