164. Maximum Gap
題目:
Given an unsorted array, find the maximum difference between the successive elements in its sorted form.
Try to solve it in linear time/space.
Return 0 if the array contains less than 2 elements.
You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
解答:
這題挺難理解的,但是可以舉例,比如說現(xiàn)在有1, 3, 5, 9。那么我們可以把它分成3個bucket來裝,min表示在這個bucket范圍中,存在的最小數(shù)和最大數(shù)。這個bucket的長度是最小可能的最大差值。(如果哪個差值比這個還小,那么為了填補這個小差值,就必然存在另一個差值比它大,那么這個數(shù)組的最大差值就比當前bucket大。所以均分下來的bucket是最小可能的最大差值)
b0: (1, 3) min = Integer.max, max = Integer.min
b1: (4, 6) min = Integer.max, max = Integer.min
b2: (7, 9) min = Integer.max, max = Integer.min
然后我們來看這個數(shù)組里的數(shù)在哪個bucket里,用(nums(i) - min) / gap來得到,
第一個數(shù)1在b0中,所以我們更新:
b0: (1, 3) min = 1, max = 1;
第二個數(shù)3在b0中,所以我們更新:
b0: (1, 3) min = 1, max = 3;
第三個數(shù)5在b1中,所以我們更新:
b1: (4, 6) min = 5, max = 5;
.
.
依次這樣下去。
因為每個bucket中的最大值-最小值就是我們最小的gap, 所以我們不用計算相鄰的兩個數(shù),我們只要比較后一個bucket中的最小值和前一個bucket中的最大值相差多少,取最大相差的值就是最終的結果。注意考慮min和max兩個邊界值也要加進去。
總結
以上是生活随笔為你收集整理的164. Maximum Gap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到狗咬我的右手预示着什么
- 下一篇: IOS 多线程04-GCD详解 底层并发