LeetCode 560. 和为K的子数组(前缀和+哈希+问题转化)
思路
-
把问题转化成 求任意两个前缀和A和前缀和B的差 = K
-
用哈希表unordered_map存:每一个前缀和的出现次数
-
比如说 前缀和A已经存在了哈希表中,且A出现过两次,那么现在走到前缀和B的位置,一旦B-K的值在哈希表里出现过,说明有这个子数组存在,且个数是哈希表对应的value值
额外测试数据
题目给的数据不是很好推过程
测试数据:3 4 5 2 -3 1 4 2 k=7 -> ans=4
注意k=0的数据
-
nums=1 k=0 -> 0
-
nums=-1,-1,1 k=0 ->1
AC代码
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int sum[20010];
memset(sum,0,sizeof(sum));
unordered_map<int,int>mp; // 底层哈希表 ,记录出现次数而不是是否出现过
int ans=0;
mp[0]=1; // *** 一定要加上!
for(int i=0;i<nums.size();i++) // i是索引
// for(auto &i:nums) // i是值,不是索引! 索引需要额外开一个变量index记录
{
if(i==0) // 初始化
sum[0]=nums[i];
else
sum[i]=sum[i-1]+nums[i];
if(mp[sum[i]-k]) ans+=mp[sum[i]-k];
mp[sum[i]]++; // 上一步判断完再标记!否则 1 k=0会输出1而不是正确答案0
}
return ans;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2021-03-17 Intern Day28 - URL内部分析
2021-03-17 Intern Day28 - PostgreSQL - 事务transaction
2020-03-17 寒假Day54:POJ3254-Corn Fields-状压dp入门题
2020-03-17 寒假Day54:poj2378-Tree Cutting-没用树形dp写的树的题-dfs
2020-03-17 寒假Day54:HDU5976-Detachment-前缀和+前缀积+逆元(费马小定理)+二分