Maximum Gap

This page explains Java solution to problem Maximum Gap using Bucket Sorting algorithm.

Problem Statement

Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

Return 0 if the array contains less than 2 elements.

Example 1:

Input: [3,6,9,1]
Output: 3
Explanation: The sorted form of the array is [1,3,6,9], either(3,6) or (6,9) has the maximum difference 3.

Example 2:

Input: [10]
Output: 0
Explanation: The array contains less than 2 elements, therefore return 0.

Solution

If you have any suggestions in below code, please create a pull request by clicking here.

package com.vc.hard;

class MaximumGap {
    public int maximumGap(int[] nums) {
        if(nums == null || nums.length < 2) return 0;

        int n = nums.length;
        int[] bucketMin = new int[n];
        int[] bucketMax = new int[n];

        int minValue = Integer.MAX_VALUE;
        int maxValue = Integer.MIN_VALUE;
        for(int i = 0; i < nums.length; i++) {
            minValue = Math.min(nums[i], minValue);
            maxValue = Math.max(nums[i], maxValue);
            bucketMin[i] = Integer.MAX_VALUE;
            bucketMax[i] = Integer.MIN_VALUE;
        }

        int avgGap = (int)Math.ceil((double)(maxValue - minValue) / (n - 1));
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] == minValue || nums[i] == maxValue) continue;

            int bucketIndex = (nums[i] - minValue) / avgGap;
            bucketMin[bucketIndex] = Math.min(bucketMin[bucketIndex], nums[i]);
            bucketMax[bucketIndex] = Math.max(bucketMax[bucketIndex], nums[i]);
        }

        int maxGap = Integer.MIN_VALUE;
        int prev = minValue;
        for(int i = 0; i < nums.length; i++) {
            if(bucketMin[i] == Integer.MAX_VALUE && bucketMax[i] == Integer.MIN_VALUE) continue;

            maxGap = Math.max(maxGap, bucketMin[i] - prev);
            prev = bucketMax[i];
        }
        maxGap = Math.max(maxGap, maxValue - prev);
        return maxGap;
    }
}

Time Complexity

O(N) Where
N is total number of elements in an input array.

Space Complexity

O(N) Where
N is total number of elements in an input array.