题意:
给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
思路:
从头开始遍历,维护一个map记录1与0的数量差,到当前时,如果曾经出现过一样的数量差,说明当前pos到之前pos这段数量相等
int findMaxLength(int[] nums) {
int n=nums.length;
int ans=0,cnt1=0,cnt0=0;
Map<Integer,Integer> map=new HashMap<>();
map.put(0,-1);
for(int i=0;i<n;i++){
if(nums[i]!=0){
cnt1++;
}
else {
cnt0++;
}
if(map.containsKey(cnt1-cnt0)){
ans=Math.max(ans,i-map.get(cnt1-cnt0));
}
else{
map.put(cnt1-cnt0,i);
}
}
return ans;
}
时间复杂度O(N)
空间复杂度O(N)