题目描述:
题目思路:
1)首先设置一个数组装两个不一样的数
2)前期通过size值进行判断,是的数组中装了不一样的数,才开始主函数
3)设置一个开始节点(最长切片的开始位置)和重新开始节点(如果上一个不是最长,需要重新开始的位置)
遍历数组中每个数,有三种情况
(1)如果在同集合中数相同,且与上一个节点不同那么开始节点不变,改边重新开始节点
(2) 如果在同集合中数相同,且与上一个节点相同,那么开始节点不变,重新开始节点也不改变
(3) 如果在同集合中数不相同,那么开始节点不变变为重新开始节点,重新开始节点变为现在的值,且把数组中第一个数去掉,第二个数移动到第一个,目前遍历的数添加到末尾。
4)得到最大的长度。
package tsl;
public class demo2 {
public static void main(String[] args) {
int[]A=new int[]{0,0,4,3,4,3,5,5,5,9};
System.out.println(solution( A));
}
public static int solution(int[] A) {
//进行查找
int[] data=new int[2];
int start=0; //开始的位置
int start1=0; //更新的位置
int length=0; //只有两个数的长度
int size=0;
for(int j=0;j<A.length;j++){
if(j==0){ //第一个数
data[0]=A[j];
start=j;
size++;
}else if(size<2 && A[j]==A[j-1]){ //数组没满,只有一个数情况
} else if(size<2 && A[j]!=A[j-1]){ //数组没满,能凑齐两个数情况
data[1]=A[j];
start1=j;
size++;
}else{ //数组已经满了
if(A[j]==data[0] ||A[j]==data[1] && A[j]==A[j-1]){
}else if(A[j]==data[0] ||A[j]==data[1] &&A[j]!=A[j-1]){
start1=j;
}else{
int temp=data[1];
data[1]=A[j];
data[0]=temp;
start=start1;
start1=j;
}
}
length=Math.max(length,j-start+1);
}
return length;
}
}