题目描述1

笔者解答1.1
class Solution {
public int findMaxLength(int[] nums) {
int res=0,sum=0;
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
nums[i]=-1;
}
}
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
sum+=nums[i];
if(sum==0){
res=i+1;
}
if(map.containsKey(sum)){
res=Math.max(i-map.get(sum),res);
}else{
map.put(sum,i);
}
}
return res;
}
}
笔者分析1.2
挺有意思的一道题,要使0和1的数量相等,那么将0全都改为-1,和为0即可。从头开始遍历,每次遍历都将和和该值下标和入哈希表中,若该值再次出现,则这两段之间的部分和为0。
总结
每日十题打卡第二十天,以下图为证

本文介绍了一种高效的方法来寻找一个数组中最长的含有等数量0和1的子数组。通过将0替换为-1,问题转化为寻找元素和为0的最长子数组。使用哈希表记录每个和首次出现的位置,可以在线性时间内解决此问题。
657

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



