LeetCode刷题记160
164. 最大间距
class Solution {
public int maximumGap(int[] nums) {
int min = Integer.MAX_VALUE;
int max = -1;
for (int num : nums) {
min = Math.min(min, num);
max = Math.max(max, num);
}
if (max == min || max == -1) return 0;
// 相邻数字的最大间距不会小于(max−min)/(nums.length−1)
int dist = (int)Math.ceil((double)(max - min) / (nums.length-1));
int[] _min = new int[nums.length]; // 每个桶的最小值
int[] _max = new int[nums.length]; // 每个桶的最大值
Arrays.fill(_min, Integer.MAX_VALUE);
Arrays.fill(_max, -1);
for (int num : nums) {
int id = (num - min) / dist; // 第几个桶
_min[id] = Math.min(_min[id], num);
_max[id] = Math.max(_max[id], num);
}
int pre_id = -1;
for (int i = 0; i < nums.length; i ++) {
if (_max[i] != -1) {
if (pre_id != -1) {
dist = Math.max(dist, _min[i] - _max[pre_id]);
}
pre_id = i;
}
}
return dist;
}
}
是一个桶排序,就是确定桶容量,也就是间距的时候要注意一下(我偷看了答案)
// 相邻数字的最大间距不会小于(max−min)/(nums.length−1)
int dist = (int)Math.ceil((double)(max - min) / (nums.length-1));