news 2026/6/10 10:17:50

23. 合并 K 个升序链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
23. 合并 K 个升序链表

23. 合并 K 个升序链表

困难

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6

示例 2:

输入:lists = [] 输出:[]

示例 3:

输入:lists = [[]] 输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i]升序排列
  • lists[i].length的总和不超过10^4

📝 核心笔记:合并 K 个升序链表 (Merge K Sorted Lists)

1. 核心思想 (一句话总结)

“锦标赛赛制:两两对决,胜者晋级,直到决出总冠军。”

这本质上就是归并排序 (Merge Sort)的逻辑,只不过这里的“元素”变成了“一条链表”。

  • 我们不按顺序一个一个合,而是将 k 条链表从中间切开,左边一半自己去合,右边一半自己去合。
  • 最终问题回归到我们最熟悉的合并两个有序链表 (LC 21)
2. 算法流程 (递归分治)
  1. 分解 (Divide)
    • 将当前的链表数组范围[i, j)对半切分。
    • 递归处理左区间[i, mid)
    • 递归处理右区间[mid, j)
  1. 终止 (Base Case)
    • 如果范围内没有链表 (m == 0):返回null
    • 如果范围内只有一条链表 (m == 1):不用合了,直接返回这条链表。
  1. 合并 (Conquer)
    • 获取左边合并好的大链表left
    • 获取右边合并好的大链表right
    • 调用mergeTwoLists(left, right)将它们合二为一。
🔍 代码回忆清单
// 题目:LC 23. Merge k Sorted Lists class Solution { public ListNode mergeKLists(ListNode[] lists) { // 范围是左闭右开 [0, length) return mergeKLists(lists, 0, lists.length); } // 分治核心函数 private ListNode mergeKLists(ListNode[] lists, int i, int j) { int m = j - i; // 当前范围内的链表数量 // 1. Base Case: 没链表了 if (m == 0) return null; // 2. Base Case: 只剩一条,直接交上去 if (m == 1) return lists[i]; // 3. 分治:计算中点 // i + m / 2 等同于 (i + j) / 2 ListNode left = mergeKLists(lists, i, i + m / 2); ListNode right = mergeKLists(lists, i + m / 2, j); // 4. 合并:复用 LC 21 的逻辑 return mergeTwoLists(left, right); } // 复用合并两个有序链表的代码 (略) private ListNode mergeTwoLists(ListNode list1, ListNode list2) { ... } }
🖼️ 数字演练

输入:[L1, L2, L3, L4](4条链表)

  1. Level 1 (Top): Range[0, 4). Split into[0, 2)and[2, 4).
  2. Level 2 (Left): Range[0, 2). Split into[0, 1)and[1, 2).
    • ReturnL1andL2.
    • Merge:New_L12 = merge(L1, L2).
  1. Level 2 (Right): Range[2, 4). Split into[2, 3)and[3, 4).
    • ReturnL3andL4.
    • Merge:New_L34 = merge(L3, L4).
  1. Back to Level 1:
    • Merge:Final = merge(New_L12, New_L34).

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:49:23

【2026 权威版】计算机八大顶级竞赛全解析,大厂求职必冲!

前言 在计算机领域&#xff0c;参加竞赛不仅能够提升自己的专业技能&#xff0c;还能为未来的考研和就业增添有力的砝码。今天&#xff0c;就为大家详细介绍计算机专业的八大顶级竞赛。 竞赛介绍 01ACM 国际大学生程序设计竞赛 重要程度&#xff1a; ★★★★★ 赛事时间&am…

作者头像 李华
网站建设 2026/6/10 16:00:02

基于深度学习的杂草检测系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于深度学习的杂草检测系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码带UI界面和数据集。使用pyqt5开发&#xff0c;支持图片和视频检测。采用yolov8模型&#xff0c;检测速度快&#xff0c;精度高系统界面友好&#xff…

作者头像 李华
网站建设 2026/6/10 13:29:05

一键生成证件照,AI智能证件照在线生成源码系统的十大核心功能

温馨提示&#xff1a;文末有资源获取方式智能人脸识别与一键抠图系统搭载先进的AI图像处理引擎&#xff0c;能够在一秒钟内精准定位照片中的人脸。自动完成人脸角度校正、智能裁剪&#xff0c;并实现发丝级别的精细抠图&#xff0c;彻底去除杂乱背景&#xff0c;为后续处理打下…

作者头像 李华
网站建设 2026/6/10 0:33:13

机器学习 - 对抗性机器学习

摘要&#xff1a;对抗性机器学习研究机器学习模型面对对抗性攻击时的脆弱性。攻击者通过微小扰动欺骗模型做出错误预测&#xff0c;可能影响自动驾驶、医疗等关键领域。主要攻击类型包括规避攻击、投毒攻击和模型反演攻击。防御技术有对抗训练、防御性蒸馏等。Python中可使用Cl…

作者头像 李华
网站建设 2026/6/10 13:34:31

写论文省心了!千笔,专科生的AI论文神器

你是否正为论文写作而焦头烂额&#xff1f;选题无从下手、文献查找困难、框架逻辑混乱、查重率高得让人头疼……这些困扰&#xff0c;是否让你感到力不从心&#xff1f;专科生的论文之路本就不易&#xff0c;再加上时间紧迫和知识储备不足&#xff0c;更让写作变得举步维艰。别…

作者头像 李华