🌐 AI搜索 & 代理 主页

0023. 合并 K 个升序链表

题目地址(23. 合并 K 个排序链表)

https://leetcode-cn.com/problems/merge-k-sorted-lists/

题目描述


合并  k  个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

前置知识

  • 链表

  • 归并排序

公司

  • 阿里

  • 百度

  • 腾讯

  • 字节

思路

这道题目是合并 k 个已排序的链表,号称 leetcode 目前最难的链表题。 和之前我们解决的88.merge-sorted-array很像。 他们有两点区别:

  1. 这道题的数据结构是链表,那道是数组。这个其实不复杂,毕竟都是线性的数据结构。

  2. 这道题需要合并 k 个元素,那道则只需要合并两个。这个是两题的关键差别,也是这道题难度为hard的原因。

因此我们可以看出,这道题目是88.merge-sorted-array的进阶版本。其实思路也有点像,我们来具体分析下第二条。 如果你熟悉合并排序的话,你会发现它就是合并排序的一部分

具体我们可以来看一个动画

23.merge-k-sorted-lists

(动画来自 https://zhuanlan.zhihu.com/p/61796021 )

关键点解析

  • 分治

  • 归并排序(merge sort)

代码

代码支持 JavaScript, Python3, CPP

JavaScript Code:

Python3 Code:

CPP Code:

复杂度分析

  • 时间复杂度:$O(kn*logk)$

  • 空间复杂度:$O(logk)$

相关题目

扩展

这道题其实可以用堆来做,感兴趣的同学尝试一下吧。

大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。 大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。

最后更新于

这有帮助吗?