这题是用桶排序,做的时候犯了三个错:
1. 最大最小值的array一开始没有设置初始值,那当然会错,因为最小会一直停留在0那里:(
2. 忘记check corner case, 就是数组长度小于等于2的情况
3. 空桶要跳过,直接挨着顺序看桶,那也必错。
下面是通过的Leetcode AC的
public int maximumGap(int[] num) {
if(num.length<2) {
return 0;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(int i=0; i<num.length; i++){
min=Math.min(min,num[i]);
max=Math.max(max,num[i]);
}
int len= Math.max(1,(max-min)/(num.length-1));
if(num.length==2){
return max-min;
}
int n = (max-min)/len + 1;
int[] bMin = new int[n];
int[] bMax = new int[n];
Arrays.fill(bMin, Integer.MAX_VALUE);
Arrays.fill(bMax, Integer.MIN_VALUE);
for(int i=0;i<num.length;i++){
int tmp=(num[i]-min)/len;
bMin[tmp]=Math.min(bMin[tmp],num[i]);
bMax[tmp]=Math.max(bMax[tmp],num[i]);
}
int res = Integer.MIN_VALUE;
int pre = bMax[0];
for(int i=1;i<n-1;i++){
if(bMin[i] == Integer.MAX_VALUE && bMax[i] == Integer.MIN_VALUE)
continue;
res = Math.max(res, bMin[i]-pre);
pre = bMax[i];
}
res = Math.max(res,bMin[n-1]-pre);
return res;
}