题目:
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。
要求:0和1在子数组中连续
例如:
nums = [0,1]
输出 2
nums = [0,1,0]
返回 2
nums = [0,0,1,1,0,1]
返回 4
解法:
class Solution {
// 子数组中的0,1要求连续
public int findMaxLength1(int[] nums) {
int num1 = 0; // 前1个连续子数组的个数
int num2 = 0; // 后1个连续子数组的个数
int countson = 0; // 结果
int temp ; // 零时数据
int point = 0; // 数组指针
// 特殊情况处理
if (nums.length<2){
return 0;
} else if (nums.length==2){
if (nums[0]!=nums[1]){
return 2;
} else {
return 0;
}
}
while (point < nums.length){
if (point == nums.length-1){
temp = Integer.min(num1,num2) * 2;
countson = Integer.max(temp,countson);
break;
}
if (nums[point]==nums[point+1]){
num2++; // 如果相同则继续数数
} else {
num2 += 1;
temp = Integer.min(num1,num2) * 2;
countson = Integer.max(temp,countson);
num1 = num2; // 遇到不相同的,则将num2重置,并将其结果交给num1保管..如上图num2向后移动,同时,num2原来的位置成为num1
num2 = 0;
}
point ++;
}
return countson;
}
}