自己写的太复杂了,一开始想的是给开始的lists头们排序,然后从这个序列的第一个抽出来,然后再重新用二分法进行排序,不过这个方法large超时了,看了网上的发现还是用很土地方法用一个for循环从前两个开始merge到最后,不知道为什么自己把这个想这么复杂。

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *merge(ListNode *p, ListNode *q) {
12         if (!p) return q;
13         if (!q) return p;
14         ListNode *ret = NULL;
15         ListNode *reti;
16         while (p && q) {
17             if (!ret) {
18                 ret = new ListNode(min(p->val, q->val));
19                 reti = ret;
20                 if (p->val < q->val) p = p->next;
21                 else q = q->next;
22             }
23             else {
24                 ListNode *tmp = new ListNode(min(p->val, q->val));
25                 ret->next = tmp;
26                 ret = ret->next;
27                 if (p->val < q->val) p = p->next;
28                 else q = q->next;
29             }
30         }
31         if (!p) ret->next = q;
32         if (!q) ret->next = p;
33         return reti;
34     }
35     ListNode *mergeKLists(vector<ListNode *> &lists) {
36         // Start typing your C/C++ solution below
37         // DO NOT write int main() function
38         if (!lists.size()) return NULL;
39         ListNode *ret = lists[0];
40         for (int i = 1; i < lists.size(); i++) ret = merge(ret, lists[i]);
41         return ret;
42     }
43 };

推荐下面这个更符合面试的代码

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 struct cmp {
10     bool operator()(ListNode *a, ListNode *b) {
11         return a->val > b->val;
12     }
13 };
14 class Solution {
15 public:
16     ListNode *mergeKLists(vector<ListNode *> &lists) {
17         priority_queue<ListNode*, vector<ListNode*>, cmp> S;
18         if (lists.size() == 0) return NULL;
19         for (int i = 0; i < lists.size(); i++) {
20             if (lists[i]) S.push(lists[i]);
21         }
22         ListNode *ans = NULL;
23         ListNode *p = ans;
24         while (!S.empty()) {
25             ListNode *tmp = S.top();
26             if (!ans) {
27                 ans = tmp;
28                 p = ans;
29             }
30             else {
31                 p->next = tmp;
32                 p = p->next;
33             }
34             if (!tmp->next) S.pop();
35             else {
36                 tmp = tmp->next;
37                 S.pop();
38                 S.push(tmp);
39             }
40         }
41         return ans;
42     }
43 };

转载于:https://www.cnblogs.com/yingzhongwen/archive/2013/04/09/3010533.html

LeetCode: Merge k Sorted Lists相关推荐

  1. [leetcode] Merge k Sorted Lists

    2019独角兽企业重金招聘Python工程师标准>>> Merge k sorted linked lists and return it as one sorted list. A ...

  2. [LeetCode] Merge k Sorted Lists 合并k个有序链表

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

  3. LeetCode Merge k Sorted Lists 解决报告

    https://oj.leetcode.com/problems/merge-k-sorted-lists/ 归并K已经整理阵列,和分析算法的复杂. 解决报告:无论是不考虑优化,最简单的实现是要重新走 ...

  4. LeetCode Merge k Sorted Lists(有序单链表数组的合并)

    题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution {private ListNod ...

  5. LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)

    Time:2019/4/10 Title: Merge K Sorted Lists Difficulty: Difficulty Author: 小鹿 题目:Merge K Sorted Lists ...

  6. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

    21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...

  7. 71. Merge k Sorted Lists

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

  8. 【LeetCode】【数组归并】Merge k Sorted Lists

    描述 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  9. 合并k个有序链表 python_[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 ...

最新文章

  1. JQuery:JQuery 中的CSS()方法
  2. [20150601]模拟ora-00600[2608]错误.txt
  3. “throw”和“throw ex”之间有区别吗?
  4. 1026 Modular multiplication of polynomials
  5. 30个使用jQuery打造的世界级一流网站
  6. CF429E Points and Segments(欧拉回路)
  7. linux下反删除软件,浅谈Linux文件系统反删除方法(二)
  8. GitHub上严重匮乏!适合新手的C++项目,我在这里找到了!
  9. how to open files as sudo
  10. 数字信号处理matlab版答案,数字信号处理(MATLAB版)
  11. 产品读书《人类简史》
  12. html5ie11缩放,IE 11 页面缩放后再次打开不能保存之前的缩放比例
  13. 哈夫曼实现文件压缩解压缩(c语言)
  14. 数字图像处理 笔记--2
  15. 2018-2019赛季多校联合新生训练赛第四场 18-12-09
  16. Rhino6.9软件安装教程|兼容WIN10
  17. 安卓搭建虚拟服务器,安卓手机搭建云服务器
  18. 为服务器选择固态硬盘的一个优点和缺点
  19. YML(YAML)语法(文件后缀为.yml格式)
  20. 南邮——计算机图像学——光照、冯氏光照模型

热门文章

  1. WCF学习笔记之序列化
  2. oracle中sql语句的优化(转帖)
  3. VS2010 自动化整理代码(1)--- VS正则表达替换 PK Vim
  4. [导入]C#好书盘点【月儿原创】
  5. matlab光学毕业论文,光学信息处理实验的Matlab仿真.doc
  6. OpenGL 各类库的解析gl glu glut freeglut glfw glew
  7. golang mysql 崩溃_mysql连接问题,goruntime里执行总是出错,程序一直崩溃
  8. 从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】
  9. vue 父组件与子组件之间的传值(普通传值)
  10. java 获取 网卡名称_Java获取网卡信息详解