leetcode 164最大間隔

桶排序的思想,一共有n個數,如果放進大於等於n個桶裏面,最大間隔將從桶的間隔中取。如果要放進大於等於n個桶裏,那麼桶的增量應該怎麼取。
首先要把n個數字去除重複的數字,然後將最大值減去最小值也就是累計的增量,由於最少要設置n個桶,那麼一共增加n-1次,可以讓增量爲(最大值-最小值)/(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].append(num)
        res=0
        
        for i in range(k):
            if len(h[i])!=0:
                mi=min(h[i])
                if i>0:
                    res=max(res,mi-ma)
                ma=max(h[i])
   
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章