import java.util.*;
//获得最长的可整合子数组的长度
public class GetMaxArrLen{
//方法一:(对每个子数组排序得到是否是按照1递增判断)
public static int GetMaxArrLen01(int[]arr)
{
if(arr==null)
{
return 0;
}
int len=0; //返回的可整合子数组的长度
LinkedList <Integer>subArr=new LinkedList<Integer>();
for(int i=0;i<arr.length;i++)
{
for(int j=i;j<arr.length;j++)
{
for(int k=i;k<=j;k++)
{
subArr.add(arr[k]);
}
if(IsAddOne(subArr))
{
len=Math.max(len,j-i+1);
}
}
//清除一个子数组的数据
subArr.clear();
}
return len;
}
//判断是否按照1递增
public static boolean IsAddOne(LinkedList subArr)
{
int[]newArr=new int[subArr.size()];
int i=0;
while(subArr.size() != 0)
{
newArr[i]=(int)subArr.removeFirst();
i++;
}
Arrays.sort(newArr); //对子数组进行排序
for(int j=0;j<newArr.length-1;j++)
{
if(newArr[j]!=newArr[j+1]-1)
{
return false;
}
}
return true;
}
//方法二:(对每个子数组排序得到子数组个数是否为max-min+1判断)
public static int GetMaxArrLen02(int[]arr)
{
if(arr==null)
{
return 0;
}
int len=0; //返回的可整合子数组的长度
for(int i=0;i<arr.length;i++)
{
int max=Integer.MIN_VALUE;
int min=Integer.MAX_VALUE;
for(int j=i;j<arr.length;j++)
{
// int max=arr[i];
// int min=arr[i];
// for(int k=i+1;k<=j;k++)
// {
// max=Math.max(max,arr[k]);
// min=Math.min(min,arr[k]);
// }
max=Math.max(max,arr[j]);
min=Math.min(min,arr[j]);
if(max-min==j-i)
{
len=Math.max(len,j-i+1);
}
}
}
return len;
}
public static void main(String[]args)
{
//System.out.println("Hello");
int[]arr={5,5,3,2,6,4,3};
System.out.println(GetMaxArrLen01(arr));
System.out.println(GetMaxArrLen02(arr));
}
}