欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

8.9最长的可整合子数组的长度

程序员文章站 2022-03-01 17:17:50
...
题目

可整合数组:如果一个数组在排序之后,每相邻两个数差的绝对值都为1,则该数组为可整合数组。

给定一个整型数组arr,请返回其中最大可整合子数组的长度。

代码实现
public int getLIL(int[] arr) {
    if (arr == null || arr.length == 0) {
        return 0;
    }

    int len = 0;
    int max = 0;
    int min = 0;
    //用于判断重复
    HashSet<Integer> set = new HashSet<>();

    for (int i = 0; i < arr.length; i++) {
        max = Integer.MIN_VALUE;
        min = Integer.MAX_VALUE;
        //一个数组中如果没有重复元素,并且如果最大值减去最小值,再加1的结果等于元素个数,那么这个数组就是可整合数组
        for (int j = i; j < arr.length; 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();
    }

    return len;
}