给定一个数组,求如果排序之后,相邻两数的最大差值,要求时 间复杂度O(N),且要求不能用非基于比较的排序。
public static int getMaxSub(int[] nums) {
int len = nums.length;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int num : nums) {
max = num > max ? num : max;
min = num < min ? num : min;
}
if (max == min) {
return 0;
}
boolean[] hasNum = new boolean[nums.length+1];
int[] maxs = new int[nums.length+1];
int[] mins = new int[nums.length+1];
for (int i = 0; i < nums.length; i++) {
int buck = bucket(nums[i], len, max, min);
maxs[buck] = hasNum[buck] ? Math.max(nums[i],maxs[buck]) : nums[i];
mins[buck] = hasNum[buck] ? Math.min(nums[i],mins[buck]) : nums[i];
hasNum[buck] = true;
}
int res = 0;
int lastMax = maxs[0];
for (int i = 1; i <= len; i++) {
if (hasNum[i]){
res = Math.max(mins[i]-lastMax,res);
lastMax = maxs[i];
}
}
return res;
}
public static int bucket(int num, int len, int max, int min) {
return (num - min) * len / (max - min);
}
转载请注明原文地址:https://blackberry.8miu.com/read-43586.html