import java.util.Arrays;
public class Test32 {
//这里使用long 是为了 相乘的时候防止溢出
public static int bucket(long num, long max, long min, long len) {
return (int) ((num - min) * len / (max - min));
}
//间隔
public static int maxGap(int[] arr) {
//如果数组是空的或者 数组的元素 小于等于1 ,直接返回
if (arr == null || arr.length < 2) {
return 0;
}
//计算出数组的长度
int len = arr.length;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
//计算出 数组的最大值
for (int i = 0; i < arr.length; i++) {
max = Math.max(arr[i], max);
min = Math.min(arr[i], min);
}
//定义 len+1个桶
boolean[] hasNumber = new boolean[len + 1];
int[] maxNumber = new int[len + 1];
int[] minNumber = new int[len + 1];
for (int i = 0; i < arr.length; i++) {
//计算出桶号
int bid = bucket(arr[i], max, min, len);
//存放数据
maxNumber[bid] = hasNumber[bid] ? Math.max(arr[i], maxNumber[bid]) : arr[i];
minNumber[bid] = hasNumber[bid] ? Math.min(arr[i], minNumber[bid]) : arr[i];
hasNumber[bid] = true;
}
int i = 1;
int lastMax = maxNumber[0];
int res = 0;
for (; i <= len; i++) {
if (hasNumber[i]) {
res = Math.max(minNumber[i] - lastMax, res);
lastMax = maxNumber[i];
}
}
return res;
}
public static void main(String[] args) {
int[] arr=new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i]=(int)(Math.random()*101);
}
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println(maxGap(arr));
}
}