https://oj.leetcode.com/problems/merge-k-sorted-lists/

这道题主要是考虑测试数据的特点吧。

刚开始的时候想,每次找出头结点中最小的两个,然后取最小的一个,一直取到它的值 > 倒数第二小的,之后重复这个过程。

适合的数据特点为: 1 2 3 5 6 7 10 20

11 12 15 18 …… 这样子的

于是写出了代码,但是超时了。

超时的数据是这样的:[{7},{49},{73},{58},{30},{72},{44},{78},{23},{9},{40},{65},{92},{42},{87},{3},{27},{29},{40},……

也就是每个链表长度为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. ListNode *dummy = new ListNode();
  13. if(lists.size() == )
  14. return dummy->next;
  15.  
  16. int count = ; // record null number
  17. int small = ;
  18. int bigger = ;
  19. int smallestIndex = ;
  20. int biggerIndex = ;
  21. ListNode *currentNode = dummy;
  22.  
  23. for(int i = ; i < lists.size(); i++)
  24. {
  25. if(lists[i] == NULL)
  26. count++;
  27. }
  28.  
  29. while(count < lists.size() - )
  30. {
  31. findTwoLittle(lists,smallestIndex,biggerIndex);
  32. currentNode->next = lists[smallestIndex];
  33.  
  34. while(lists[smallestIndex]->next != NULL &&lists[smallestIndex]->next->val <= lists[biggerIndex]->val)
  35. {
  36. lists[smallestIndex] = lists[smallestIndex]->next;
  37. }
  38. currentNode = lists[smallestIndex];
  39. lists[smallestIndex] = lists[smallestIndex]->next;
  40. if(lists[smallestIndex] == NULL)
  41. count++;
  42. }
  43. // only one isn't null
  44. for(int i = ; i < lists.size(); i++)
  45. {
  46. if(lists[i] != NULL)
  47. {
  48. currentNode->next = lists[i];
  49. break;
  50. }
  51. }
  52. return dummy->next;
  53. }
  54. //至少还有两个元素的时候
  55. void findTwoLittle(vector<ListNode *> &lists, int &smallestIndex, int &biggerIndex)
  56. {
  57. int small = INT16_MAX;
  58. int bigger = INT16_MAX;
  59. smallestIndex = ;
  60. biggerIndex = ;
  61.  
  62. for(int i = ; i < lists.size(); i++)
  63. {
  64. if(lists[i] != NULL)
  65. {
  66. if(lists[i]->val <= small)
  67. {
  68. bigger = small;
  69. small = lists[i]->val;
  70. biggerIndex = smallestIndex;
  71. smallestIndex = i;
  72. }
  73. else if(lists[i]->val > bigger)
  74. continue;
  75. else
  76. {
  77. bigger = lists[i]->val;
  78. biggerIndex = i;
  79. }
  80. }
  81.  
  82. }
  83. }
  84. };
  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. if(lists.size() == )
  13. return NULL;
  14. ListNode *p = lists[];
  15. for(int i = ; i < lists.size(); i++)
  16. p = mergeTwoLists(p,lists[i]);
  17. return p;
  18. }
  19. ListNode *mergeTwoLists(ListNode *l1,ListNode *l2){
  20. ListNode head(-);
  21. for(ListNode *p = &head; l1 != NULL || l2 != NULL; p = p->next)
  22. {
  23. int val1 = l1 == NULL? INT_MAX:l1->val;
  24. int val2 = l2 == NULL? INT_MAX:l2->val;
  25. if(val1 <= val2)
  26. {
  27. p->next = l1;
  28. l1 = l1->next;
  29. }
  30. else
  31. {
  32. p->next = l2;
  33. l2 = l2->next;
  34. }
  35. }
  36. return head.next;
  37. }
  38. };

LeetCode OJ-- Merge k Sorted Lists *@的更多相关文章

  1. Leetcode OJ : Merge k Sorted Lists 归并排序+最小堆 mergesort heap C++ solution

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

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

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

  4. 【leetcode】Merge k Sorted Lists

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

  5. LeetCode 023 Merge k Sorted Lists

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

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

  7. [leetcode 23]Merge k Sorted Lists

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

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

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

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

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

  10. leetcode 【 Merge k Sorted Lists 】python 实现

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

随机推荐

  1. windows Server 2008 r2-搭建FTP服务器

    FTP协议介绍 FTP协议工作在OSI参考模型的第七层,TCP模型的第四层上(即应用层上).使用FTP传输而不是UDP,与服务端建立连接经过三次握手. FTP端口介绍 FTP默认端口是21,.(21端 ...

  2. exec , 元类,__new__, __call__ , 单例模式 , 异常

    1,类也是对象 ''' 动态语言 可以在运行期间 动态生成类 修改对象属性 静态语言 ''''' ''' type(object_or_name, bases, dict) type(object) ...

  3. 739. Daily Temperatures

    https://leetcode.com/problems/daily-temperatures/description/ class Solution { public: vector<int ...

  4. [转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法

    问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示:   类型 说明 ID_User int 自动增长字段,用作该表的主键 UserName varcha ...

  5. 4 Template层 -模板继承

    1.模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板 ...

  6. easyui 判断密码是否输入一致

    1.首先要扩展validatebox,添加验证两次密码功能 $.extend($.fn.validatebox.defaults.rules, { eqPassword:{ validator:fun ...

  7. ASP.NET下调用ffmpeg与mencoder实现视频转换截屏

    最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(a ...

  8. log4j2用asyncRoot配置异步日志是如何使用disruptor

    用asyncRoot配置对应的对接disruptor类是AsyncLoggerConfigDisruptor,用Log4jContextSelector启动参数配置全局异步的对应的对接disrupto ...

  9. 微信小程序-----校园头条详细开发之注册登录

    1.注册登录功能的实现 1.1结构 1.2 代码实现 1.2.1  为了通信的安全着想,在此我是通过小程序端获得code,然后传递给后端,在后端向微信后台发送api请求,解密,从而得到用户的唯一标示o ...

  10. Spring Cloud 目录

    Spring Cloud Eureka Spring Cloud Config Spring Cloud Feign Spring Cloud Hystrix Spring Cloud Ribbon ...