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的更多相关文章

  1. 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. 解 ...

  2. 蜗牛慢慢爬 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 ...

  3. 【leetcode】Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  4. LeetCode 023 Merge k Sorted Lists

    题目要求:Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and ...

  5. [leetcode 23]Merge k Sorted Lists

    1 题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...

  6. [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆

    转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...

  7. LeetCode 23 Merge k Sorted Lists(合并k个有序链表)

    题目链接: https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description Problem: 给出k个有序的list, 将其进行 ...

  8. [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 ...

  9. Java [leetcode 23]Merge k Sorted Lists

    题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complex ...

  10. 【leetcode】Merge k Sorted Lists(按大小顺序连接k个链表)

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

随机推荐

  1. B-树、B+树、B*树的区别

      原文地址:  http://blog.csdn.net/dazhong159/article/details/7963846/ B-树.B+树.B*树的区别 2012-09-11 22:41 97 ...

  2. Linux的环境变量配置

    以下都是环境变量相关的配置文件 1)/etc/enviroment 是系统的环境变量. (2)/etc/profile: 是所有用户的环境变量.当用户第一次登录时,该文件被执行. 并从/etc/pro ...

  3. shell字符串

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号 str='this ...

  4. 基于MFC与第三方类CWebPage的百度地图API开发范例

    在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...

  5. 《Java web 开发实战经典》读书笔记

    去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站 ...

  6. Keepalived+Lvs+Mysql主主复制

    一简单介绍 Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysq ...

  7. Unity 之圆环算法

    首先我们要明白圆环生成的原理,其实说白了并不是圆环,而是圆.因为我们使用的预制物体时Cube(物体本身是有大小的)难免会有发生实物的折叠看起来给人的感觉是圆环而已. 1.1 几何中我们要画一个圆,因为 ...

  8. python中的tab补全功能添加

    用Python时没有tab补全还是挺痛苦的,记录一下添加该功能的方法利人利己 1. 先准备一个tab.py的脚本 shell> cat tab.py #!/usr/bin/python # py ...

  9. Mysql show Status常用参数详解

    状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...

  10. 【高精度递推】【HDU1297】Children’s Queue

    Children's Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...