Kimi    LeetCode 3801. 合并有序列表的最小成本 Python3实现
以下是 LeetCode 3801. 合并有序列表的最小成本 的 Python3 实现方法签名为 def minMergeCost(self, lists: List[List[int]]) - int。核心思路- 关键观察任意子集合并后的有序列表其中位数只取决于该子集包含哪些原始列表与合并顺序无关。- Meet-in-the-Middle 状态压缩 DP1. 将 n ≤ 12 个列表平分为前后两半分别预处理所有子集合并后的有序数组。2. 对任意 mask利用「两个有序数组的中位数」算法LeetCode 4 变体在 O(log L) 内求出中位数。3. 子集 DPdp[mask] 表示将 mask 对应列表合并为一个的最小成本。枚举所有非空真子集转移。- 复杂度时间 O(2^n · L 3^n)空间 O(2^n L)其中 L ≤ 2000 为总长度。pythonfrom typing import Listclass Solution:def minMergeCost(self, lists: List[List[int]]) - int:n len(lists)def merge(a: List[int], b: List[int]) - List[int]:合并两个有序数组i j 0res []while i len(a) and j len(b):if a[i] b[j]:res.append(a[i])i 1else:res.append(b[j])j 1if i len(a):res.extend(a[i:])if j len(b):res.extend(b[j:])return resdef calc_sorted(sub_lists: List[List[int]]) - List[List[int]]:预计算 sub_lists 所有子集合并后的有序数组m len(sub_lists)u 1 msorted_arr [[] for _ in range(u)]for i in range(m):high_bit 1 ifor s in range(high_bit):sorted_arr[high_bit | s] merge(sub_lists[i], sorted_arr[s])return sorted_arrdef find_median_sorted_arrays(a: List[int], b: List[int]) - int:找两个有序数组合并后的下中位数。偶数长度时取左侧中间元素题目定义。if len(a) len(b):a, b b, am, n_len len(a), len(b)left, right 0, mwhile left right:mid (left right) // 2j (m n_len 1) // 2 - mid - 2if j 1 n_len and a[mid] b[j 1]:right midelse:left mid 1i left - 1j (m n_len 1) // 2 - i - 2if i 0:return b[j]if j 0:return a[i]return max(a[i], b[j])# 1. 分治预处理前后两半的所有子集合并结果m n // 2sorted1 calc_sorted(lists[:m])sorted2 calc_sorted(lists[m:])u 1 nhalf (1 m) - 1# 2. 预计算每个 mask 的中位数和总长度median [0] * ufor mask in range(1, u):median[mask] find_median_sorted_arrays(sorted1[mask half],sorted2[mask m])# 3. 子集 DPINF float(inf)dp [0] * ufor mask in range(u):if mask (mask - 1) 0: # 0 或单个列表无需合并continuedp[mask] INFsub (mask - 1) mask# 只枚举 sub other 避免重复计算对称性while sub (mask ^ sub):other mask ^ subdp[mask] min(dp[mask],dp[sub] dp[other] abs(median[sub] - median[other]))sub (sub - 1) mask# 加上当前合并的长度成本len(sub) len(other) len(mask)dp[mask] len(sorted1[mask half]) len(sorted2[mask m])return dp[u - 1]验证结果输入 期望 实际[[1,3,5],[2,4],[6,7,8]] 18 18[[1,1,5],[1,4,7,8]] 10 10[[1],[3]] 4 4[[1],[1]] 2 2

相关新闻

MapStruct深度解析:Java对象映射的高性能编译时解决方案与工程实践

MapStruct深度解析:Java对象映射的高性能编译时解决方案与工程实践

1. 项目概述:为什么MapStruct是Java对象映射的“瑞士军刀” 在Java后端开发里,对象之间的属性拷贝,也就是我们常说的“对象映射”,是一个高频到几乎无法回避的操作。从Controller层的DTO到Service层的BO,再到DAO层的En…

2026/9/12 11:00:17 阅读更多 →
微软CTO神操作:让画图软件以35帧每秒“玩”《毁灭战士》!

微软CTO神操作:让画图软件以35帧每秒“玩”《毁灭战士》!

【导语:过去几年画图应用已有多项实用升级,而微软Azure首席技术官马克拉希诺维奇找到了让画图软件“玩”《毁灭战士》的办法,虽非真正运行游戏,但能以每秒35帧流畅加载渲染画面。】画图软件的新奇玩法在画图应用不断升级的背景下&…

2026/9/20 5:35:03 阅读更多 →
浪潮服务器CentOS 7安装全攻略:从RAID配置到系统部署

浪潮服务器CentOS 7安装全攻略:从RAID配置到系统部署

1. 浪潮服务器上安装CentOS 7:从硬件到系统的完整旅程如果你刚拿到一台崭新的浪潮服务器,看着机箱上闪烁的指示灯和前面板密密麻麻的接口,第一反应可能是兴奋,紧接着可能就是一丝迷茫:这台性能强大的“铁疙瘩”&#x…

2026/9/18 13:42:04 阅读更多 →

最新新闻

3天搞定美的定义项目图解原理

3天搞定美的定义项目图解原理

3天搞定美的定义项目图解原理 配置环境就卡半天,是不是让你对着黑底白字的终端窗口抓狂?别急,这种痛苦我太熟悉了。很多新手在写第一行代码前,光是下载依赖、配 Python 路径、调 Node…

2026/9/22 16:03:05 阅读更多 →
Mell配置卡半天?新手避坑指南与底层原理图解

Mell配置卡半天?新手避坑指南与底层原理图解

Mell配置卡半天?新手避坑指南与底层原理图解 刚接手新项目,为了跑通 Mell 相关的环境配置,我盯着屏幕愣了半小时。依赖冲突、版本不兼容、环境变量丢失,每一个坑都让人血压飙升。这种“配置环境就卡半天”的经历,绝对是 新手避坑…

2026/9/22 16:03:05 阅读更多 →
齐逼手写实现:新手避坑指南与3个致命陷阱

齐逼手写实现:新手避坑指南与3个致命陷阱

齐逼手写实现:新手避坑指南与3个致命陷阱 版本升级后 API 全变了?这是无数开发者在接触“齐逼”相关底层逻辑时的第一反应。很多新手避坑指南只讲理论,却忽略了工程落地的血泪教训。今天不谈虚的,直接拆解核心机制,帮你把这块硬骨头啃下来。…

2026/9/22 16:03:05 阅读更多 →
拒绝配置卡壳 联系邮箱号码大全速查手册实战指南

拒绝配置卡壳 联系邮箱号码大全速查手册实战指南

拒绝配置卡壳 联系邮箱号码大全速查手册实战指南 配置环境就卡半天,这种痛苦谁懂?装个依赖报 404,改个端口号被防火墙拦截,或者最经典的——代码里硬编码了邮箱和电话,上线前发现漏改了一个测试账号,导致数据发给了老板。别急,今天不聊虚的,直接…

2026/9/22 16:02:04 阅读更多 →
kindle使用教程与一个人抽烟伤感图片对比选型

kindle使用教程与一个人抽烟伤感图片对比选型

面试被问原理卡壳?用Kindle源码解析性能优化 上周面试某大厂后端岗,面试官问:“如何优化一个高频读取的配置文件?”我愣了三秒,脑子里全是 read() 系统调用和页缓存,但结合不了业务场景。面试官眼神变了,我知道这轮悬了。…

2026/9/22 16:02:04 阅读更多 →
酷狗音乐2012源码拆解:3个关键点实现入门到精通

酷狗音乐2012源码拆解:3个关键点实现入门到精通

酷狗音乐2012源码拆解:3个关键点实现入门到精通 还在为官方文档冗长抓不住重点而头疼?别慌,今天直接带你拆解酷狗音乐2012版的核心逻辑。…

2026/9/22 16:02:04 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →