package com.interview.array; /** * Date 03/12/2016 * @author Tushar Roy * * Given an unsorted array find maximum gap between consecutive element in sorted array. * * Time complexity O(n) * Space complexity O(n) * * Reference * https://leetcode.com/problems/maximum-gap/ */ public class MaximumGap { class Bucket { int low ; int high; boolean isSet = false; void update(int val) { if (!isSet) { low = val; high = val; isSet = true; } else { low = Math.min(low, val); high = Math.max(high, val); } } } public int maximumGap(int[] input) { if (input == null || input.length < 2) { return 0; } int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE; for (int i = 0; i < input.length; i++) { min = Math.min(min, input[i]); max = Math.max(max, input[i]); } int gap = (int) Math.ceil((double) (max - min) / (input.length - 1)); Bucket[] buckets = new Bucket[input.length - 1]; for (int i = 0; i < buckets.length; i++) { buckets[i] = new Bucket(); } for (int i = 0; i < input.length; i++) { if (input[i] == max || input[i] == min) { continue; } buckets[(input[i] - min) / gap].update(input[i]); } int prev = min; int maxGap = 0; for (int i = 0; i < buckets.length; i++) { if (!buckets[i].isSet) { continue; } maxGap = Math.max(maxGap, buckets[i].low - prev); prev = buckets[i].high; } return Math.max(maxGap, max - prev); } public static void main(String args[]) { int[] input = {4, 3, 13, 2, 9, 7}; MaximumGap mg = new MaximumGap(); System.out.println(mg.maximumGap(input)); } }