尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Kimi    LeetCode 3510. 移除最小数对使数组有序 II Python3实现
以下是 LeetCode 3510. Minimum Pair Removal to Sort Array II 的 Python3 实现。解题思路这道题要求将时间复杂度从 O(n²) 优化到 O(n log n)核心思路是1. 最小相邻对查找使用 最小堆 (heapq) 维护所有相邻元素对的和支持 O(log n) 的插入和弹出最小值。2. 有序性判断不每次扫描整个数组而是维护一个 num_descending 计数器记录当前有多少对相邻元素是递减的即 nums[i] nums[i1]。当计数器为 0 时数组即为非递减序列。3. 双向链表使用 Node 类模拟双向链表实现 O(1) 的节点删除操作。合并两个节点时只需修改指针无需实际移动数组元素。4. 惰性删除堆中可能包含过期的相邻对信息因为某些节点已被合并弹出时检查 node.value node.next.value value不匹配则跳过。Python3 代码pythonimport heapqfrom typing import Listclass Node:def __init__(self, value: int, i: int):self.value value # 当前节点的值self.i i # 原始下标用于打破平局选最左边的对self.prev None # 前一个节点self.next None # 后一个节点self.descending False # 当前节点值 下一个节点值def remove(self):从双向链表中移除当前节点if self.prev:self.prev.next self.nextif self.next:self.next.prev self.prevself.next self.prev Noneclass Solution:def minimumPairRemoval(self, nums: List[int]) - int:n len(nums)if n 1:return 0# 初始化双向链表从右往左构建tail Node(nums[-1], n - 1)for i in range(n - 2, -1, -1):head Node(nums[i], i)head.next tailtail.prev headtail head# 初始化最小堆存储 (相邻对和, 左端点原始下标, 左端点节点引用)heap []num_descending 0cur tailwhile cur and cur.next:heap.append((cur.value cur.next.value, cur.i, cur))cur.descending cur.value cur.next.valueif cur.descending:num_descending 1cur cur.nextif num_descending 0:return 0heapq.heapify(heap)num_operations 0while num_descending 0:value, _, node heapq.heappop(heap)# 惰性删除检查这对是否仍然有效# 如果 node 已被合并没有 next或者和已改变则跳过if not node.next or node.value node.next.value ! value:continue# 合并 node 和 node.next# 1. 处理 node.next 的 descending 标记if node.next.descending:num_descending - 1# 2. 移除 node.next 节点node.next.remove()# 3. 更新 node 的值为两数之和node.value valuenum_operations 1# 4. 更新与 node 相关的相邻对前一个和当前节点for pair in (node.prev, node):if not pair:continuedescending Falseif pair.next:# 将新的相邻对和推入堆heapq.heappush(heap, (pair.value pair.next.value, pair.i, pair))descending pair.value pair.next.value# 更新 descending 计数num_descending descending - pair.descendingpair.descending descendingreturn num_operations复杂度分析- 时间复杂度O(n log n)。每次堆操作 O(log n)每个节点最多被合并一次每个相邻对最多被推入堆两次。- 空间复杂度O(n)。用于存储链表节点和堆。
RELATED

相关推荐

WT2801A4蓝牙音频芯片:2.4G广播更新小FLASH也能轻松切换不同的语言包

WT2801A4蓝牙音频芯片:2.4G广播更新小FLASH也能轻松切换不同的语言包

多语言语音播报正在成为消费电子产品出海的标配功能。一台销往欧洲的智能小家电,可能需要英语、德语、法语、西班牙语四种语音包;一条产线上下来的主板,最终要发往十几个国家。传统做法是把所有语言提前烧进一颗大容量Flash,按 re…

📅 2026/10/11 13:53:05
uBlock Origin完整指南:5分钟打造无广告、高隐私的纯净浏览器体验

uBlock Origin完整指南:5分钟打造无广告、高隐私的纯净浏览器体验

uBlock Origin完整指南:5分钟打造无广告、高隐私的纯净浏览器体验 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 你是否厌倦了网页上无…

📅 2026/9/2 22:41:47
从入门到精通:OpenSCOW计算中心管理平台全攻略(含10个实用技巧)

从入门到精通:OpenSCOW计算中心管理平台全攻略(含10个实用技巧)

从入门到精通:OpenSCOW计算中心管理平台全攻略(含10个实用技巧) 【免费下载链接】OpenSCOW OpenSCOW is a platform that supports the operation and management of computing centers. 项目地址: https://gitcode.com/openeuler/OpenSCOW…

📅 2026/9/2 22:42:32
MORE NEWS

更多资讯

📰

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存在AI本地化圈子里处境挺尴尬的:你说它能跑模型吧,7B量化之后勉强能聊;你说它跑不好吧,又确实比集显强太多。大多数教程讲的都是怎么用Ollama跑一个聊天模型,但很少有人说可以更进一步——把它变成一只能听懂人话…

📰

大模型系统性入门:从原理、部署到微调应用的完整路线

1. 为什么你收藏了300个教程,依然觉得大模型没入门我先讲一个前几天在交流群里看到的真实场景:有人问"大模型怎么入门",群里立马有人甩出几个网盘链接,里面躺着几百个PDF和视频,说是"全网最全的大模型学…

📰

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

📰

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

📰

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

📰

OpenClaw机械爪技术解析与应用实践

## 1. 项目背景与核心概念最近在机器人抓取领域看到一个挺有意思的讨论——"openclaw"这个概念。作为一个在工业自动化领域摸爬滚打多年的工程师,我第一眼就被这个命名吸引了。Openclaw直译就是"开放式爪具",但它的内涵远不止字面意…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬