桶排序的思想,一共有n個數,如果放進大於等於n個桶裡面,最大間隔將從桶的間隔中取。如果要放進大於等於n個桶裡,那麼桶的增量應該怎麼取。
首先要把n個數字去除重複的數字,然後將最大值減去最小值也就是累計的增量,由於最少要設定n個桶,那麼一共增加n-1次,可以讓增量為(最大值-最小值)/(n-1)取整,桶的個數即為(最大值-最小值)/增量 加一後向上取整。
class
solution
:def
maximumgap
(self, nums: list[
int])-
>
int:
nums=
list
(set
(nums)
) n=
len(nums)
if n<2:
return
0 max_num,min_num=
max(nums)
,min
(nums)
if max_num==min_num:
return
0
b=(max_num-min_num)
//(n-1)
k=math.ceil(
(max_num-min_num)
//b+1)
h=[[
]for i in
range
(k)]
for num in nums:
h[(num-min_num)
//b]
res=
0for i in
range
(k):
iflen
(h[i])!=
0:mi=
min(h[i]
)if i>0:
res=
max(res,mi-ma)
ma=max(h[i]
)return res
LeetCode 164 最大間距
給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 輸出 0解釋 陣列元素個數小於 2,因此...
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 ...