最大间距
🎯 问题描述(来源于LeetCode)
描述:
给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。
您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。
说明:
1 <= nums.length <= 105
0 <= nums[i] <= 109
示例:
1 2 3
| 输入:nums = [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
|
1 2 3
| 输入: nums = [10] 输出: 0 解释: 数组元素个数小于 2,因此返回 0。
|
💻 解题思路
思路1:桶排序
思路1:代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution: def maximumGap(self, nums: List[int]) -> int: if len(nums) < 2: return 0 min_val, max_val = min(nums), max(nums) if min_val == max_val: return 0 n = len(nums) bucket_size = max(1, (max_val - min_val) // (n - 1)) bucket_count = (max_val - min_val) // bucket_size + 1 buckets = [[float('inf'), float('-inf')] for _ in range(bucket_count)] for num in nums: bucket_idx = (num - min_val) // bucket_size buckets[bucket_idx][0] = min(buckets[bucket_idx][0], num) buckets[bucket_idx][1] = max(buckets[bucket_idx][1], num) max_gap = 0 prev_max = None for i in range(bucket_count): if buckets[i][0] == float('inf'): continue if prev_max is not None: max_gap = max(max_gap, buckets[i][0] - prev_max) prev_max = buckets[i][1] return max_gap
|
思路1:📊 性能分析
提交结果
- 运行时间:623ms击败19.29%
- 内存消耗:41.55MB击败5.17%
复杂度验证
- 时间复杂度:O(N)
- 空间复杂度:O(N)
思考