先给出可整合数组的定义:如果一个数组在排序之后,每相邻两个数的差的绝对值都为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); } }