给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
这个应用到了桶排序,
将数划分到多个桶当中,这里需要确定桶内间距必须小于等于最大间距。
from typing import *
class Solution:
def maximumGap(self, nums: List[int]) -> int:
if len(nums) < 2:
return 0
max_val, min_val = max(nums), min(nums)
if min_val == max_val:
return 0
len_bucket = max(1, (max_val - min_val) // (len(nums) - 1))
num_bucket = (max_val - min_val) // len_bucket + 1
buckets = [[] for _ in range(num_bucket)]
for val in nums:
idx = (val - min_val) // len_bucket
buckets[idx].append(val)
pre_max = None
max_gap = 0
for i in range(num_bucket):
if buckets[i] and pre_max:
max_gap = max(max_gap, min(buckets[i]) - pre_max)
if buckets[i]:
pre_max = max(buckets[i])
return max_gap