题目描述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。
总结
每日十题打卡第二十天,以下图为证