给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 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;
}
}