002 最长的可整合子数组的长度
Table of Contents

ac

先给出可整合数组的定义:如果一个数组在排序之后,每相邻两个数的差的绝对值都为1,或者该数组长度为1,则该数组为可整合数组。例如,[5, 3, 4, 6, 2]排序后为[2, 3, 4, 5, 6],符合每相邻两个数差的绝对值都为1,所以这个数组为可整合数组
给定一个数组arr, 请返回其中最大可整合子数组的长度。例如,[5, 5, 3, 2, 6, 4, 3]的最大可整合子数组为[5, 3, 2, 6, 4],所以请返回5
import java.util.Scanner;

public class Main {

    public static Scanner sc = new Scanner(System.in);

    // 7 5 5 3 2 6 4 3
    public static void main(String[] args) {
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++){
            arr[i] = sc.nextInt();
        }
        int ans = 1;
        for(int i=0;i<n-1;i++){
            int min = arr[i];
            int max = arr[i];
            int len = 1;
            for(int j=i+1;j<n;j++){
                if(arr[j] == min || arr[j] == max){
                    break;
                }else {
                    len++;
                    if(arr[j] > max){
                        max = arr[j];
                    }
                    if(arr[j] < min){
                        min = arr[j];
                    }
                }
                // i j 区间的最大长度(连续数的最大-最小是数字个数)
                if(max - min + 1 == len){
                    if(len > ans){
                        ans = len;
                    }
                }
            }
        }
        System.out.println(ans);
    }

}