题解 |
最长的可整合子数组的长度
http://www.nowcoder.com/practice/677a21987e5d46f1a62cded9509a94f2
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine().split(" ")[0]);
int[] arr=new int[n];
String[] s=sc.nextLine().split(" ");
for(int i=0;i<n;i++){
arr[i]=Integer.parseInt(s[i]);
}
if(arr.length==0) System.out.print(0);
int len=0;
int max=0;
int min=0;
//用于判断重复
HashSet<Integer> set=new HashSet<>();
for(int i=0;i<n;i++){
max=Integer.MIN_VALUE;
min=Integer.MAX_VALUE;
//一个数组中如果没有重复元素,并且如果最大值减去最小值,再加1的结果等于元素个数,那么这个数组就是可整合数组
for(int j=i;j<n;j++){
if(set.contains(arr[j])) break; //去除重复值
set.add(arr[j]);
max=Math.max(max,arr[j]);
min=Math.min(min,arr[j]);
if(max-min==j-i){
len=Math.max(len,j-i+1);
}
}
set.clear();
}
System.out.print(len);
}
}