164.Maximum Gap
1-Onlogn-Sort
class Solution {
public int maximumGap(int[] nums) {
Arrays.sort(nums);
int maxGap = 0;
for(int i = 1; i < nums.length; i++){
maxGap = Math.max(maxGap, nums[i] - nums[i - 1]);
}
return maxGap;
}
}
2-Radix Sort
class Solution {
public int maximumGap(int[] nums) {
if(nums == null || nums.length < 2)
return 0;
int minVal = nums[0];
int maxVal = nums[0];
for(int i : nums){
minVal = Math.min(minVal, i);
maxVal = Math.max(maxVal, i);
}
int gap = (int)Math.ceil((double)(maxVal - minVal) / (nums.length - 1));
int[] bucketMIN = new int[nums.length - 1];
int[] bucketMAX = new int[nums.length - 1];
Arrays.fill(bucketMIN, Integer.MAX_VALUE);
Arrays.fill(bucketMAX, Integer.MIN_VALUE);
for(int i : nums){
if(i == minVal || i == maxVal){
continue;
}
int idx = (i - minVal) / gap;
bucketMIN[idx] = Math.min(i, bucketMIN[idx]);
bucketMAX[idx] = Math.max(i, bucketMAX[idx]);
}
int maxGap = Integer.MIN_VALUE;
int previous = minVal;
for(int i = 0; i < nums.length - 1; i++){
if(bucketMIN[i] == Integer.MAX_VALUE && bucketMAX[i] == Integer.MIN_VALUE){
continue;
}
maxGap = Math.max(maxGap, bucketMIN[i] - previous);
previous = bucketMAX[i];
}
maxGap = Math.max(maxGap, maxVal - previous);
return maxGap;
}
}