前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode打卡 | No.23 合并 k 个有序链表

Leetcode打卡 | No.23 合并 k 个有序链表

作者头像
小小詹同学
发布2018-09-25 17:55:18
6410
发布2018-09-25 17:55:18
举报
文章被收录于专栏:小詹同学小詹同学

写在前边:

欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!

PS:从第10开始,代码以图片形式给出,方便手机用户阅读,避免左右滑不便阅读,完整代码会上传GitHub上了:https://github.com/Jan1995/LeetCode


No.23 合并 k 个有序链表

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

示例:

代码语言:javascript
复制
输入:[
  1->4->5,
  1->3->4,
  2->6
]输出: 1->1->2->3->4->4->5->6

这一题可以看作是前边第 21 题的升级版 ,小伙伴们可以温故一下之前类似的题目 :

Leetcode打卡 | No.21 合并两个有序链表

这里是 k 个有序链表 ,小詹看到第一反应是直接递归使用前边合并两个有序链表的思路 ,对 ,完全没毛病的 。然后参考答案里是类似的 ,只不过合并的方式不一样 ,这里采取的是两两合并的方式 ,过程见下图 :

这里可以很清晰的看懂思路 ,实现代码如下 :

这种方式的结果大概是 beat 65% 左右 ,还有一种看起来比较复杂的办法 ,但是结果却很赞 。大体思路分为三步 :

  1. 创建一个列表
  2. 将所有链表的元素值 append 进列表
  3. 进行排序 ,之后再转换为链表结构

代码实现如下 :

题目中要求描述下算法复杂度 ,这里以第二种 "三步曲" 的算法为例描述 ,另一方法读者自行尝试下哦 。

  1. 时间复杂度 ,分为三步分别考虑 ,首先将所有链表节点值收集到列表中时间复杂度为 O(N) ;排序使用 python 的 sorted ,这里插一句 ,公号前期文章有 8 大排序算法的介绍 ,这步复杂度为 O(NlogN) ;第三步则是再创建链表 ,转换为目标结构为 O(N)
  2. 空间复杂度 ,排序过程的空间复杂度取决于使用的算法 ,创建列表过程为 O(N)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小詹学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档