【LeetCode练习题】Merge k Sorted Lists
Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
题目意思:
合并K条已经排序的链表。分析时间复杂度。
解题思路:
很容易就想起之前学的合并两条链表的算法,这一题其实就是那个题目的扩展,变成合并K条了。我采用的方法就是迭代法。
如果只有一条,直接返回。如果只有两条,就只需要调用mergeTwo一下。如果超过两条链表的话,先将前两个链表调用mergeTwo,然后用新的链表和第三个链表调用mergeTwo,再用结果和第四个链表调用mergeTwo,依次调用到最后一个链表。
时间复杂度貌似是O(n2)……有点慢。Orz~不过AC了。
有一点就是我这里用来合并两个链表的方法mergeTwo是用递归实现的(《剑指offer》第116页中代码),课本上是用循环的。大家可以参考一下。
其实更有效率的方法就是归并法,即先lists分成一半,再分成一半,直到分成只有两个了再调用一下mergeTwo。这样效率会高很多。mark一下,该方法代码以后看心情补上。
代码如下:
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
if(lists.size() == ){
return lists[];
}
if(lists.size() == ){
ListNode *ret;
ret = mergeTwo(lists[],lists[]);
return ret;
}
if(lists.size() > ){
ListNode *p = NULL;
p = mergeTwo(lists[],lists[]);
for(int i = ; i < lists.size(); i++){
p = mergeTwo(p,lists[i]);
}
return p;
}
}
ListNode *mergeTwo(ListNode *list1,ListNode *list2){
//合并list1和list2,返回新的list3的头结点指针
if(list1 == NULL){
return list2;
}
else if(list2 == NULL){
return list1;
}
ListNode *list3 = NULL;
if(list1->val < list2->val){
list3 = list1;
list3->next = mergeTwo(list1->next,list2);
}
else{
list3 = list2;
list3->next = mergeTwo(list1,list2->next);
}
return list3;
}
};
【LeetCode练习题】Merge k Sorted Lists的更多相关文章
- Java for LeetCode 023 Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...
- 蜗牛慢慢爬 LeetCode 23. Merge k Sorted Lists [Difficulty: Hard]
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- 【leetcode】Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- LeetCode 023 Merge k Sorted Lists
题目要求:Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and ...
- [leetcode 23]Merge k Sorted Lists
1 题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆
转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...
- LeetCode 23 Merge k Sorted Lists(合并k个有序链表)
题目链接: https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description Problem: 给出k个有序的list, 将其进行 ...
- [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- Java [leetcode 23]Merge k Sorted Lists
题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complex ...
- 【leetcode】Merge k Sorted Lists(按大小顺序连接k个链表)
题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
随机推荐
- python 递归展开嵌套的序列(生成器用法)
任何使用yield语句的函数都称为生成器.调用生成器函数将创建一个对象,该对象通过连续调用next()方法(在python3中是__next__())生成结果序列. next()调用使生成器函数一直运 ...
- Farming
Problem Description You have a big farm, and you want to grow vegetables in it. You're too lazy to s ...
- noip2014总结
noip总结 经过七周的停课,我们终于迎来了期盼已久的noip考试.在这一次的noip考试中,我们经历了很多,也收获了很多.当然这一次考试中也有很多值得总结的地方,特写此总结. 这一次考试考得还不错, ...
- Safari HTML5 Canvas Guide: Creating Charts and Graphs
Safari HTML5 Canvas Guide: Creating Charts and Graphs Bar graphs are similar to data plots, but each ...
- Impala 2、Impala Shell 和 Impala SQL
1.Impala 外部 Shell Impala外部Shell 就是不进入Impala内部,直接执行的ImpalaShell 例如通过外部Shell查看Impala帮助可以使用: $ impala-s ...
- 【转】Android LCD(一):LCD基本原理篇
关键词:android LCD TFT 液晶 偏光片 彩色滤光片 背光 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:samsung exyno ...
- 代码中实际运用memcached——.NET
本文取自:http://blog.csdn.net/dyllove98/article/details/9115947 memcached安装:============================ ...
- Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)
为了保证应用程序存储数据的安全性,开发人员在开发应用程序的过程中须要注意使用Android 应用程序的内部存储空间. 依据不同的要求.将相应的数据文件.缓存文件.暂时文件等分别存储在相应的位置. 注意 ...
- Android系统Surface机制的SurfaceFlinger服务的线程模型分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8062945 在前面两篇文章中,我们分析了Sur ...
- zookeeper 丢失事件/miss event
今天在统计页面上发现有个节点丢失了,经过仔细分析后,发现同一个节点上的二个应用(同时监控zk)其中一个丢失了一个event,检查zk cluster没有发现异常... 通过网络搜寻,出现miss ev ...