要求时间和空间复杂度是O(n).有两种思路:基数排序和桶排序。
基数排序:
import java.util.Arrays;
/**
* @author hehao
* @create 2020-11-26 17:11
*/
class Solution {
public int maximumGap(int[] nums) {
int length = nums.length;
if (length<2){
return 0;
}
int maxNum = Arrays.stream(nums).max().getAsInt();
int temporaryArrays[] = new int[length];
int myDivisor = 1;
int[] digit = new int[10];
while (myDivisor <= maxNum) {
for (int i = length - 1; i >= 0; i--) {
int num = nums[i] / myDivisor % 10;
digit[num]++;
}
for (int i = 1; i < 10; i++) {
digit[i] += digit[i - 1];
}
for (int i = length - 1; i >= 0; i--) {
int num = nums[i] / myDivisor % 10;
temporaryArrays[digit[num]-1] = nums[i];
digit[num]--;
}
System.arraycopy(temporaryArrays, 0, nums, 0, length);
Arrays.fill(digit, 0);
myDivisor = myDivisor * 10;
}
int maximumGap = 0;
for (int i = 1; i < length; i++) {
maximumGap = Math.max(maximumGap, nums[i] - nums[i - 1]);
}
return maximumGap;
}
}