连续数组问题
连续数组问题
一·题目:leetcode链接:. - 力扣(LeetCode) 二·思路:思路:前缀和(第二种)+化0为-1+hash:这样可以把原题中的求子数组内零,1个数相同的最长子数组长度 转为 把0改为-1,即和为零的最长子数组长度:->这样就是前缀和为sum的最最短子数组,也就是让hash表内key存每次遍历的sum也就是前缀和,而value存它前缀和位置的下标,这样如果遍历到某个
连续数组问题
leetcode链接:. - 力扣(LeetCode)
二·思路:
思路:前缀和(第二种)+化0为-1+hash:
这样可以把原题中的求子数组内零,1个数相同的最长子数组长度 转为 把0改为-1,即和为零的最长子数组长度:->这样就是前缀和为sum的最最短子数组,也就是让hash表
内key存每次遍历的sum也就是前缀和,而value存它前缀和位置的下标,这样如果遍历到某个i的位置发现此区间内存在目标,则此时该区间和为sum,目标区间为0
故一定存在前缀和为sum,故往hash去key,发现后得到它的下标进行:i-hash[sum](长度注意);
当然这里还存在两个小细节问题:1.【-1,1】->这时符合题意但是sum此刻等于0,然而hash【0】没有初始化,因此让它ret等于2,故初始化为-1.
2.每次sum都要储存吗?当然不是:如果每次都存进去,假设上一次是刚比较出ret,那么此刻sum和某个位置前缀和相等,如果存进去则hash内对应下标是sum的值就会变大,也就是原数组下标变大,这时如果后面连着有出现为0的区间此时,ret跟新的就是后面那个小的区间,而真正的最长区间应该是这两个合一起,故只要比较了max那么就不能再次跟新此时的下标了
三·代码:
代码语言:javascript代码运行次数:0运行复制class Solution {
public:
int findMaxLength(vector<int>& nums) {
int ret=0,sum=0;
unordered_map<int,int>hash;
hash[0]=-1;
for(int i=0;i<nums.size();i++){
nums[i]=nums[i]==1?1:-1;//化0为-1;
sum+=nums[i];
if((sum)) ret=max(ret,i-hash[sum]);
else hash[sum]=i;
}
return ret;
}
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-2,如有侵权请联系 cloudcommunity@tencent 删除遍历数组hashintsum #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-18 19:33:28
上一篇:数组中两个字符串的最小距离问题
下一篇:和可被k整除的子数组问题
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 yesbaby | 26分钟前 发表 |
发现后得到它的下标进行:i-hash[sum](长度注意);当然这里还存在两个小细节问题:1.【-1 | |
本站网友 干细胞隆胸 | 6分钟前 发表 |
1个数相同的最长子数组长度 转为 把0改为-1 | |
本站网友 青岛市南实验小学 | 2分钟前 发表 |
这时如果后面连着有出现为0的区间此时 | |
本站网友 网站发布 | 6分钟前 发表 |
ret跟新的就是后面那个小的区间 | |
本站网友 1万炒股一年最多挣多少 | 5分钟前 发表 |
1个数相同的最长子数组长度 转为 把0改为-1 | |
本站网友 大集体改制 | 4分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 大连艺校 | 22分钟前 发表 |
即和为零的最长子数组长度:->这样就是前缀和为sum的最最短子数组 | |
本站网友 食品安全管理师 | 6分钟前 发表 |
而真正的最长区间应该是这两个合一起 | |
本站网友 北京隆鼻医院 | 9分钟前 发表 |
这样如果遍历到某个i的位置发现此区间内存在目标 | |
本站网友 胡洋 | 24分钟前 发表 |
i-hash[sum]); else hash[sum]=i; } return ret; } };本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 奥林匹克森林公园北园 | 20分钟前 发表 |
int findMaxLength(vector<int>& nums) { int ret=0 | |
本站网友 武汉影讯 | 4分钟前 发表 |
-1;//化0为-1; sum+=nums[i]; if((sum)) ret=max(ret | |
本站网友 免疫力低 | 4分钟前 发表 |
int findMaxLength(vector<int>& nums) { int ret=0 | |
本站网友 3d画廊 | 24分钟前 发表 |
这样如果遍历到某个i的位置发现此区间内存在目标 | |
本站网友 新浪微博i | 30分钟前 发表 |
故只要比较了max那么就不能再次跟新此时的下标了三·代码:代码语言:javascript代码运行次数:0运行复制class Solution { public | |
本站网友 jeep牧马人敞篷 | 16分钟前 发表 |
则此时该区间和为sum |