Java for You 数据结构 合并 K 个升序链表 | LeetCode 23

合并 K 个升序链表 | LeetCode 23

题目描述

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

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

​

示例 1:

示例 2:

示例 3:

​

提示:

  • 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

​

题目解析

21. 合并两个有序链表 的延伸,利用 优先级队列(二叉堆) 进行节点排序即可。

​

参考代码

以下为 Java 代码。

​

​

复杂度分析

​

  • 时间复杂度:
  • 考虑优先队列中的元素不超过 k 个,那么插入和删除的时间代价为 O(log⁡k),这里最多有 kn 个点,对于每个点都被插入删除各一次,故总的时间代价即渐进时间复杂度为 O(kn×log⁡k)。
  • 空间复杂度:这里用了优先队列,优先队列中的元素不超过 k 个,故渐进空间复杂度为 O(k)。

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3307.html

作者: 蜗牛

删除链表的倒数第 N 个结点 | LeetCode 19

删除排序链表中的重复元素 | LeetCode 83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部