LeetCode 164.最大间距

要求时间和空间复杂度是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;
    }
}

猜你喜欢

转载自blog.csdn.net/xiaoshazheng/article/details/110198291