LeetCode 164 最大間距

2021-09-18 06:45:31 字數 1298 閱讀 4791

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。

如果陣列元素個數小於 2,則返回 0。

示例 1:

輸入:[3,6,9,1]輸出:3解釋:排序後的陣列是 [1,3,6,9],其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
示例 2:

輸入:[10]輸出:0解釋:陣列元素個數小於 2,因此返回 0。
說明:

此題限制了o(n)的時間複雜度,所以我們用桶排序來做。設陣列中有n個數,最大的數為maxn,最小的數為minn。那麼每個桶的大小為(maxn - minn) / n + 1,桶的個數為(maxn - minn) / basket_size + 1。然後我們遍歷陣列nums,把每個數用式子(i - minn) / basket_size計算出應該放到哪個桶裡,然後更新每個桶的最大值和最小值,然後將放的位置存入雜湊set中,用來知道哪些桶不是空的。for迴圈結束後,陣列basket_min就記錄了每個桶的最小數,陣列basket_max就記錄了每個桶的最大數。由於桶的個數設定為(maxn - minn) / basket_size + 1,所以至少有乙個空桶,如果某乙個桶中有兩個數,那就會有兩個空桶了。由於每個桶的容量都一樣,所以乙個桶中的兩個數的間距一定沒有中間隔著空桶的兩個數的間距大,因此下面我們利用雜湊set找到非空桶,然後我們遍歷非空桶,分別用每個非空桶的最小值與他的上乙個非空桶的最大值計算間隔,遍歷結束後所有間隔裡取最大者就是陣列nums的最大間隔。

class solution 

int basket_size = (maxn - minn) / n + 1;

int basket_num = (maxn - minn) / basket_size + 1;

vectorbasket_min(basket_num, int_max);

vectorbasket_max(basket_num, int_min);

unordered_setuset;

for(int i : nums)

int ans = 0;

int pre = 0;

for(int i = 1; i < basket_num; i++)

return ans;

}};

leetcode 164 最大間距

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。第一時間想到的也是最簡單的,先將所給陣列排序,再遍歷一遍陣列找出最大間距 複雜度分析 首先我們來了解一下桶排序的思想。桶排序是體現了分治的思想。原理是建立若干個桶,通過某種對映將待排序的元素放置到桶...

leetcode 164 最大間距

目錄 一 題目內容 二 解題思路 三 給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3 解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 ...

leetCode 164 最大間距

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3 6,9 1 輸出 3解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 輸出 0解釋 陣列元素個數小於 2,因此...