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

题解:

  归并思想。

Solution 1

  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* mergeKLists(vector<ListNode*>& lists) {
  12. int n = lists.size();
  13. if (n < )
  14. return nullptr;
  15.  
  16. for (int i = ; i < n ; i *= ) {
  17. int len = i;
  18. for (int j = ; j + len < n; j += *len) {
  19. lists[j] = mergeTwoLists(lists[j], lists[j + len]);
  20. }
  21. }
  22.  
  23. return lists[];
  24. }
  25. ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
  26. ListNode dummy(-);
  27. ListNode *cur = &dummy;
  28. while (l1 && l2) {
  29. if (l1->val < l2->val) {
  30. cur->next = l1;
  31. l1 = l1->next;
  32. } else {
  33. cur->next = l2;
  34. l2 = l2->next;
  35. }
  36. cur = cur->next;
  37. }
  38. cur->next = l1 ? l1 : l2;
  39.  
  40. return dummy.next;
  41. }
  42. };

Solution 2

  利用最小堆,c++的优先队列priority_queue。

  1. class Solution {
  2. public:
  3. struct cmp {
  4. bool operator () (ListNode *a, ListNode *b) {
  5. return a->val > b->val;
  6. }
  7. };
  8. ListNode *mergeKLists(vector<ListNode *> &lists) {
  9. priority_queue<ListNode*, vector<ListNode*>, cmp> q;
  10. for (auto list : lists) {
  11. if (list)
  12. q.push(list);
  13. }
  14.  
  15. ListNode *head = NULL, *pre = NULL, *tmp = NULL;
  16. while (!q.empty()) {
  17. tmp = q.top();
  18. q.pop();
  19. if (!pre)
  20. head = tmp;
  21. else
  22. pre->next = tmp;
  23. pre = pre->next;
  24. // 此节点所在数组仍有元素,则添加进最小堆中
  25. if (tmp->next)
  26. q.push(tmp->next);
  27. }
  28. return head;
  29. }
  30. };

转自:Grandyang

【LeetCode】023. Merge k Sorted Lists的更多相关文章

  1. 【LeetCode】23. Merge k Sorted Lists 合并K个升序链表

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,链表,单链表,题解,leetcode, 力扣,Py ...

  2. 【LeetCode】23. Merge k Sorted Lists

    合并k个已合并链表. 思路:先把链表两两合并,直到合并至只有一个链表 /** * Definition for singly-linked list. * struct ListNode { * in ...

  3. 【LeetCode】21. Merge Two Sorted Lists 合并两个有序链表

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,有序链表,递归,迭代,题解,leetcode, 力 ...

  4. 【一天一道LeetCode】#23. Merge k Sorted Lists

    一天一道LeetCode系列 (一)题目 Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  5. 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告

    题目地址: https://oj.leetcode.com/problems/merge-k-sorted-lists/ 题目内容: /** * Definition for singly-linke ...

  6. 【Lintcode】104.Merge k Sorted Lists

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

  7. 【LeetCode】21. Merge Two Sorted Lists

    题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...

  8. 【leetcode】 21. Merge Two Sorted Lists

    题目描述: Merge two sorted linked lists and return it as a new list. The new list should be made by spli ...

  9. 【LeetCode】021. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

随机推荐

  1. USB-HID鼠标、键盘通讯格式(转) 与本人实际测试结果

    内容为网络转载,如有版权问题请联系删除 USB鼠标键盘协议介绍. 鼠标发送给PC的数据每次4个字节:BYTE1 BYTE2 BYTE3 BYTE4.定义分别是:BYTE1 -- |--bit7:    ...

  2. proxool连接池 异常

    这是第二次整理这个文章: 首先说明proxool连接池有两种配置方式: 第一种:采用jdbc.properties的方式 第二种:采用proxool.xml的配置方 后面在完善这两种配置方式(在上班哦 ...

  3. 【python】-- GIL锁、线程锁(互斥锁)、递归锁(RLock)

    GIL锁 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行的, ...

  4. 【题解】Cutting Game

    [题解]Cutting Game vjudge 谈谈对\(sg\)函数的理解? 浅谈公平组合游戏IGC //@winlere #include<cstring> #include<c ...

  5. scala actor编程之对象传递

    scala 最吸引人的一点就是actor并发编程了.但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题.但是在正式开放中,光传字符串就 ...

  6. RLearning第2弹:创建数据集

    任何一门语言,数据类型和数据结构是最基础,也是最重要的,必须要学好!1.产生向量 a<-c(1,2,5,3,6,-2,4) b<-c("one","two&q ...

  7. linux基础part3

    linux基础 一.linux基本命令归档命令. 1.归档的定义:归档就是把许多文件或目录打包成一个文件. 2.tar命令格式:tar  [参数-cxtzjvfpPN]  打包文件名 文件或目录路径 ...

  8. 小程序getApp() 被删除坑

    在一个非page的js文件内使用getApp,当前台切到后台的时候,定义的var app = getApp()被删除了 如:新建一个app-libs.js start: function() { va ...

  9. vim 真是上瘾啊

    再次更新 .vimrc " leaderlet mapleader = ","nnoremap <leader>ev :vsplit ~/.vimrc< ...

  10. 【leetcode刷题笔记】Reverse Words in a String

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...