当前位置: 首页 > news >正文

LeetCode 164:最大间距 | 桶排序与鸽巢原理

LeetCode 164最大间距 | 桶排序与鸽巢原理引言最大间距Maximum Gap是 LeetCode 第 164 题难度为 Hard。题目要求在未排序的数组中找到排序后相邻元素之间的最大差值要求使用线性时间复杂度和 O(n) 空间复杂度。这道题不能使用简单的排序因为要求线性时间。解决方案基于桶排序和鸽巢原理首先找到最大值和最小值确定桶的大小然后使用桶来记录每个桶内的最小值和最大值。问题分析题目描述给定未排序数组 nums返回排序后相邻元素之间的最大差值。如果数组元素少于 2 个返回 0。问题特点要求线性时间复杂度和 O(n) 空间复杂度普通的排序算法如快速排序不满足要求。需要使用桶排序。解决方案桶排序方法def maximumGap(nums): if len(nums) 2: return 0 min_val min(nums) max_val max(nums) if min_val max_val: return 0 bucket_size (max_val - min_val) // (len(nums) - 1) if bucket_size 0: bucket_size 1 bucket_num (max_val - min_val) // bucket_size 1 buckets [[float(inf), float(-inf)] for _ in range(bucket_num)] for num in nums: idx (num - min_val) // bucket_size buckets[idx][0] min(buckets[idx][0], num) buckets[idx][1] max(buckets[idx][1], num) max_gap 0 previous_max min_val for bucket_min, bucket_max in buckets: if bucket_min float(inf): continue max_gap max(max_gap, bucket_min - previous_max) previous_max bucket_max return max_gap算法详解找到数组的最小值和最大值计算桶大小bucket_size (max - min) / (n - 1)将元素放入对应的桶中记录每个桶的最小值和最大值遍历所有桶计算相邻非空桶的最大差值鸽巢原理根据鸽巢原理n 个数放入 n-1 个桶后至少有一个桶是空的。最大间距一定大于等于桶大小且只可能出现在非空桶之间。复杂度分析时间复杂度时间复杂度为 O(n)因为只需要常数次遍历。空间复杂度空间复杂度为 O(n)用于存储桶。代码实现Python 实现def maximumGap(nums): if len(nums) 2: return 0 min_val min(nums) max_val 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: idx (num - min_val) // bucket_size buckets[idx][0] min(buckets[idx][0], num) buckets[idx][1] max(buckets[idx][1], num) max_gap 0 previous_max min_val for bucket_min, bucket_max in buckets: if bucket_min float(inf): continue max_gap max(max_gap, bucket_min - previous_max) previous_max bucket_max return max_gap测试用例def test_maximum_gap(): assert maximumGap([3, 6, 9, 1]) 3 assert maximumGap([10]) 0 assert maximumGap([1, 1, 1, 1]) 0 assert maximumGap([1, 3, 6, 9]) 3 print(所有测试用例通过)总结最大间距问题展示了桶排序和鸽巢原理的应用。通过合理设置桶大小利用鸽巢原理保证最大间距只出现在非空桶之间实现了线性时间复杂度的排序。
http://www.zskr.cn/news/1372007.html

相关文章:

  • DeepSeek混合云架构下跨AZ流量调度困局:基于eBPF+Service Mesh的实时负载感知调度器设计(已上线支撑日均2.7亿QPS)
  • 2026年5月赣州宁都地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026年5月惠州惠城地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 鸿蒙PC:Qt适配OpenHarmony实战【问答盒】:选择题、即时反馈和分数统计的 QML 写法
  • 2026年5月惠州惠东地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月惠州惠阳地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月甘南合作地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 现在停用默认filter_config将导致合规风险!DeepSeek最新CVE-2024-7812漏洞预警及3小时紧急加固方案
  • 定位失效酿成搜救困局,无源无感定位破解矿山致命隐患
  • 山西沁源矿难血训:持卡定位不可靠,无感定位才是井下生命线
  • 2026年5月赣州石城地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026年5月抚顺地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • ChatGPT移动端数据同步失效?抓包分析发现:微软Azure CDN缓存策略竟导致会话丢失——附绕过方案
  • 2026年5月赣州信丰地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026年5月甘南夏河地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • DeepSeek模型轻量化部署:从GPU服务器到树莓派4B的72小时落地全流程
  • 2026年5月菏泽东明地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月抚顺抚顺地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 【限时技术白皮书解禁】ChatGPT企业版SLA协议深度拆解:99.95%可用性背后的6层容灾设计
  • 2026年5月甘肃地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026年5月抚顺顺城地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 通过curl命令快速测试Taotoken大模型API接口是否通畅
  • 2026年5月红河个旧地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月德阳地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 解锁硬件潜能:3步让你的电脑性能飙升50%
  • 微信M4A文件打不开怎么办?m4a转MP3只需一招,小白也能操作
  • 2026年5月红河红河地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月汉中留坝地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 在ubuntu20.04上快速配置taotoken的python开发环境
  • 战略分类中从在线学习错误边界到PAC保证的理论转换与算法实现