写在前边:
欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!
PS:从第10开始,代码以图片形式给出,方便手机用户阅读,避免左右滑不便阅读,完整代码会上传GitHub上了:https://github.com/Jan1995/LeetCode
No.23 合并 k 个有序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:[
1->4->5,
1->3->4,
2->6
]输出: 1->1->2->3->4->4->5->6
这一题可以看作是前边第 21 题的升级版 ,小伙伴们可以温故一下之前类似的题目 :
这里是 k 个有序链表 ,小詹看到第一反应是直接递归使用前边合并两个有序链表的思路 ,对 ,完全没毛病的 。然后参考答案里是类似的 ,只不过合并的方式不一样 ,这里采取的是两两合并的方式 ,过程见下图 :
这里可以很清晰的看懂思路 ,实现代码如下 :
这种方式的结果大概是 beat 65% 左右 ,还有一种看起来比较复杂的办法 ,但是结果却很赞 。大体思路分为三步 :
代码实现如下 :
题目中要求描述下算法复杂度 ,这里以第二种 "三步曲" 的算法为例描述 ,另一方法读者自行尝试下哦 。