本文主要是介绍获得最长的可整合子数组的长度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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));}
}
这篇关于获得最长的可整合子数组的长度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!