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;
    }
}

results matching ""

    No results matching ""