Leetcode OJ 23 Merge k Sorted Lists [Hard]
来源:互联网 发布:工行td交易软件 编辑:程序博客网 时间:2024/05/22 04:45
Leetcode OJ 23 Merge k Sorted Lists [Hard]
题目描述:
Merge k sorted linked lists and return it as one sortedlist. Analyze and describe its complexity.
public ListNodemergeKLists(List<ListNode> lists) {}
题目理解:
将k个排序链表合并为一个排序链表。
测试用例:
功能测试:输入含2个排序链表的列表;输入含3个排序链表的列表;
边界测试:输入含1个排序链表的列表;输入含0个排序链表的列表;
分析:
递归的方法:
1. 先思考如何实现合并两个排序链表:比较两个链表的头节点,更小的节点作为新的节点插入到合并的链表中;也可以用递归合并:
2. 利用合并两个排序链表的方法,合并k个排序链表:将k个链表分为左右两部分进行合并;每一部分又可以分为左右两部分合并,递归下去。
基于优先队列的方法:
3. 定义一个优先队列(传入比较器comparator),优先队列的长度是列表中包含的链表个数;优先队列的队首元素是权值最小的元素,用poll()方法获取并删除队首元素,弹出队列中权值最小的元素,当方法失败时返回null,而remove()当失败时抛出异常;
4. 定义一个虚假的头节点dummy,该头节点的next是合并后新链的头节点;维护一个指针tail表示新链的尾节点;初始tail指向虚假头节点dummy;
5. 将列表中的节点依次加入到优先队列中;
6. 当优先队列不为空时循环:优先队列弹出最小元素,赋值给tail的下一个节点;tail后移;如果现在的tail(刚才选择插入的最小元素)的下一个元素不为空,则将其加入到优先队列中;(也就是每次弹出优先队列中的最小值,弹出一个就将弹出节点的下一个节点加入优先队列,从而保证弹出顺序是从小到大)
7. 直到优先队列为空时,返回虚假节点dummy的下一个节点;
- Leetcode OJ 23 Merge k Sorted Lists [Hard]
- [Leetcode 23, Hard] Merge k Sorted Lists
- LeetCode OJ-23-Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists 【hard】
- leetcode 23. Merge k Sorted Lists(Hard)
- LeetCode 23. Merge k Sorted Lists [hard]
- Hard 23题 Merge k Sorted Lists
- LeetCode OJ:Merge k Sorted Lists
- LeetCode OJ - Merge k Sorted Lists
- LeetCode OJ Merge k Sorted Lists
- [LeetCode OJ]Merge k Sorted Lists
- [LeetCode] 023. Merge k Sorted Lists (Hard) (C++/Java/Python)
- leetcode hard模式专杀之23 merge k sorted lists
- LeetCode(23)Merge K Sorted Lists
- [leetcode 23] Merge k Sorted Lists
- [leetcode]23 Merge k Sorted Lists
- [#23 leetcode]Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists
- Oracle异常汇总
- 随机森林
- 炮 HYSBZ
- bzoj 1264: [AHOI2006]基因匹配Match 树状数组
- 相机 镜头原理及其选型
- Leetcode OJ 23 Merge k Sorted Lists [Hard]
- 2017/8/31
- mysql无密码登录
- tf入门
- python数据结构之字符串
- flask-用户认证(上)
- 【Shell指令】Linux nohup命令详解
- 给应用程序打一个war包
- Java设计模式之结构型模式-外观模式(Facade)