链接

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。

如果数组元素个数小于 2,则返回 0。

class Solution {

    private int getBucketIndex(int min, int max, int size, int val) {
        return (int) ((long) (val - min) * size / (max - min));
    }

    public int maximumGap(int[] nums) {

        int min = nums[0], max = nums[0];
        int n = nums.length;

        for (int i = 1; i < n; ++i) {
            min = Math.min(min, nums[i]);
            max = Math.max(max, nums[i]);
        }

        if (min == max) {
            return 0;
        }

        Bucket[] buckets = new Bucket[n + 1];

        for (int num : nums) {
            int index = getBucketIndex(min, max, n, num);
            if (buckets[index] == null) {
                buckets[index] = new Bucket(num, num);
            } else {
                buckets[index].min = Math.min(buckets[index].min, num);
                buckets[index].max = Math.max(buckets[index].max, num);
            }
        }

        Bucket pre = null;

        int ret = 0;
        for (Bucket bucket : buckets) {
            if (bucket != null) {
                if (pre != null) {
                    ret = Math.max(ret, bucket.min - pre.max);
                }

                pre = bucket;
            }
        }

        return ret;
    }
}

class Bucket {
    int min;
    int max;

    public Bucket(int min, int max) {
        this.min = min;
        this.max = max;
    }
}

心之所向,素履以往 生如逆旅,一苇以航