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

千问 LeetCode 2009.使数组连续的最少操作数 Python3实现

以下是 LeetCode 2009. 使数组连续的最少操作数 的 Python3 实现,采用 去重 + 排序 + 滑动窗口(双指针) 的高效方法:

✅ 解题思路回顾

目标:将数组变为一个长度为 n 的连续整数序列(如 [x, x+1, ..., x+n-1]),求最少修改次数。

关键观察:
- 最终序列有 n 个互不相同的连续整数。
- 我们希望保留尽可能多的原数组中的不同元素,且这些元素能落在某个长度为 n 的区间内。
- 因此:
最少操作数 = n - 最多可保留的不同元素个数

步骤:
1. 去重并排序(重复元素无法同时保留)。
2. 使用滑动窗口(双指针) 找出最长子数组,使得 arr[right] - arr[left] int:
n = len(nums)
# Step 1: 去重并排序
arr = sorted(set(nums))
m = len(arr)

max_keep = 1 # 至少可以保留一个数
left = 0

# Step 2: 双指针滑动窗口
for right in range(m):
# 缩小窗口直到 arr[right] - arr[left] = n:
left += 1
# 当前窗口 [left, right] 内的元素都可以保留
max_keep = max(max_keep, right - left + 1)

return n - max_keep

📊 复杂度分析

- 时间复杂度:
- 去重:O(n)
- 排序:O(m log m),其中 m ≤ n
- 双指针遍历:O(m)(每个元素最多进/出窗口一次)
→ 总体 O(n log n)

- 空间复杂度:O(n)(存储去重后的列表)

🧪 示例验证

示例 1:
nums = [4, 2, 5, 3]
去重排序后: [2,3,4,5]
窗口 [2,5]: 5-2=3 4 → 最大窗口长度=1 → 操作数=4-1=3

🔁 补充:二分查找版本(也可行)

如果你偏好二分,也可以对每个 left 用 bisect_right 找右边界:

import bisect

class Solution:
def minOperations(self, nums: List[int]) -> int:
n = len(nums)
arr = sorted(set(nums))
m = len(arr)
max_keep = 0

for i, val in enumerate(arr):
# 目标区间: [val, val + n - 1]
right_bound = val + n - 1
# 找第一个 > right_bound 的位置
j = bisect.bisect_right(arr, right_bound)
max_keep = max(max_keep, j - i)

return n - max_keep

但双指针版本更高效(O(m) vs O(m log m)),且代码简洁。

✅ 推荐使用双指针滑动窗口版本,清晰、高效、易理解。

http://www.jsqmd.com/news/740863/

相关文章:

  • [具身智能-538]:人类:硅基世界的 “建设者”,还是 “打工人”?
  • Windows 一键安装 OpenClaw 教程 零代码无命令部署
  • 链下数据索引工具sub-bridge:构建可靠链上事件监听与处理管道
  • 5分钟彻底美化你的VLC播放器:5款VeLoCity皮肤终极指南
  • 2. BundleSDF的虚拟环境搭建
  • 告别机械电位器!用STM32和MCP4017打造你的智能亮度调节模块(教程+源码)
  • 115proxy-for-kodi:在Kodi中实现115网盘视频流式播放的技术实现
  • 通过 curl 命令直接测试 Taotoken 聊天补全接口的完整步骤
  • 别再傻傻改元组了!Python新手必懂的3种‘不可变’数据替换技巧(附代码对比)
  • 告别虚拟机卡顿:实测2015款iMac用Rufus直装Win11双系统,驱动与5K分辨率完美设置指南
  • Java String 类深入解析
  • 如何快速成为斗地主高手:DouZero AI助手完整使用指南
  • 从零搭建GPU监控看板:用Python脚本+nvidia-smi定时抓取数据并可视化
  • 从色卡到代码:手把手教你用Python实现CIE 1931色度图转换(附完整代码)
  • 告别symbolicatecrash:Xcode 13.3后,用atos和CrashSymbolicator.py高效解析iOS崩溃日志
  • DBA不会告诉你的事:90%性能问题源于这5个SQL错误
  • 多平台内容矩阵分发系统 核心模块技术实现与技术选型详解
  • 深入RTA-OS内核:手把手教你配置ETAS ISOLAR多核工程的中断(Category1 vs Category2详解)
  • 从用量看板观察不同模型调用的 token 消耗与成本分布
  • 1 7.4.4 PPPoE 上网配置(拨号 → 新连接 → 宽带 PPPoE)
  • 3分钟上手:N_m3u8DL-CLI-SimpleG视频下载终极指南
  • Python分布式训练配置终极检查表(含NCCL_TIMEOUT、TF_CPP_MIN_LOG_LEVEL、RANK/WORLD_SIZE等11个关键环境变量避雷解析)
  • Windows HEIC缩略图完整教程:让资源管理器完美预览iPhone照片
  • 滴滴测开面试复盘:从两道烧脑的智力题到‘猜数字’算法,我的真实闯关记录
  • 网状Meta分析结果怎么看?手把手教你解读gemtc输出:异质性检验、节点分割与SUCRA排序图
  • 利用Taotoken模型广场为你的应用场景选择最合适的大模型
  • 【RAG】【ingestion03】摄取管道与文档管理示例
  • 告别手忙脚乱:用这些Verdi快捷键和窗口操作技巧,让你的仿真效率翻倍
  • 紧急!医疗设备量产前最后72小时:C语言采集线程死锁自愈方案(含FreeRTOS优先级翻转熔断机制源码)
  • 如何快速突破百度网盘限速:Python直链解析工具完整指南