164. 最大间距
解法一:桶方法
class Solution:
def maximumGap(self, nums: List[int]) -> int:
n = len(nums)
if n < 2:
return 0
minNum = maxNum = nums[0]
#找最大最小值
for num in nums:
minNum = min(minNum, num)
maxNum = max(maxNum, num)
#计算桶大小
gap = math.ceil((maxNum - minNum) / (n-1))
#存放所有桶的最小值和最大值
bucketsMin = [sys.maxsize] * (n-1)
bucketsMax = [-sys.maxsize] * (n-1)
#填充桶
for num in nums:
if num == minNum or num == maxNum:
continue
#计算num应该划分的桶序号
idx = (num - minNum) // gap
#更新
bucketsMin[idx] = min(bucketsMin[idx], num)
bucketsMax[idx] = max(bucketsMax[idx], num)
pre = minNum #前一个桶的最大值
maxGap = -sys.maxsize #最大间隔
#遍历所有桶
for i in range(len(nums)-1):
#若是空桶
if bucketsMin[i] == sys.maxsize and bucketsMax[i] == -sys.maxsize:
continue
maxGap = max(maxGap, bucketsMin[i] - pre)
pre = bucketsMax[i]
#最后与max比较
maxGap = max(maxGap, maxNum - pre)
return maxGap最后更新于