LeetCode OJ-- Merge k Sorted Lists *@
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,这样的话,就多了好多去两个最小值的操作。
于是参考了答案,方法是每次合并两个链表,得到一个新链表,之后新链表再和下一个合并……
代码分别如下:
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode(int x) : val(x), next(NULL) {}
- * };
- */
- class Solution {
- public:
- ListNode *mergeKLists(vector<ListNode *> &lists) {
- ListNode *dummy = new ListNode();
- if(lists.size() == )
- return dummy->next;
- int count = ; // record null number
- int small = ;
- int bigger = ;
- int smallestIndex = ;
- int biggerIndex = ;
- ListNode *currentNode = dummy;
- for(int i = ; i < lists.size(); i++)
- {
- if(lists[i] == NULL)
- count++;
- }
- while(count < lists.size() - )
- {
- findTwoLittle(lists,smallestIndex,biggerIndex);
- currentNode->next = lists[smallestIndex];
- while(lists[smallestIndex]->next != NULL &&lists[smallestIndex]->next->val <= lists[biggerIndex]->val)
- {
- lists[smallestIndex] = lists[smallestIndex]->next;
- }
- currentNode = lists[smallestIndex];
- lists[smallestIndex] = lists[smallestIndex]->next;
- if(lists[smallestIndex] == NULL)
- count++;
- }
- // only one isn't null
- for(int i = ; i < lists.size(); i++)
- {
- if(lists[i] != NULL)
- {
- currentNode->next = lists[i];
- break;
- }
- }
- return dummy->next;
- }
- //至少还有两个元素的时候
- void findTwoLittle(vector<ListNode *> &lists, int &smallestIndex, int &biggerIndex)
- {
- int small = INT16_MAX;
- int bigger = INT16_MAX;
- smallestIndex = ;
- biggerIndex = ;
- for(int i = ; i < lists.size(); i++)
- {
- if(lists[i] != NULL)
- {
- if(lists[i]->val <= small)
- {
- bigger = small;
- small = lists[i]->val;
- biggerIndex = smallestIndex;
- smallestIndex = i;
- }
- else if(lists[i]->val > bigger)
- continue;
- else
- {
- bigger = lists[i]->val;
- biggerIndex = i;
- }
- }
- }
- }
- };
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode(int x) : val(x), next(NULL) {}
- * };
- */
- class Solution {
- public:
- ListNode *mergeKLists(vector<ListNode *> &lists) {
- if(lists.size() == )
- return NULL;
- ListNode *p = lists[];
- for(int i = ; i < lists.size(); i++)
- p = mergeTwoLists(p,lists[i]);
- return p;
- }
- ListNode *mergeTwoLists(ListNode *l1,ListNode *l2){
- ListNode head(-);
- for(ListNode *p = &head; l1 != NULL || l2 != NULL; p = p->next)
- {
- int val1 = l1 == NULL? INT_MAX:l1->val;
- int val2 = l2 == NULL? INT_MAX:l2->val;
- if(val1 <= val2)
- {
- p->next = l1;
- l1 = l1->next;
- }
- else
- {
- p->next = l2;
- l2 = l2->next;
- }
- }
- return head.next;
- }
- };
LeetCode OJ-- Merge k Sorted Lists *@的更多相关文章
- Leetcode OJ : Merge k Sorted Lists 归并排序+最小堆 mergesort heap C++ solution
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- 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 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- [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 【 Merge k Sorted Lists 】python 实现
题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...
随机推荐
- windows Server 2008 r2-搭建FTP服务器
FTP协议介绍 FTP协议工作在OSI参考模型的第七层,TCP模型的第四层上(即应用层上).使用FTP传输而不是UDP,与服务端建立连接经过三次握手. FTP端口介绍 FTP默认端口是21,.(21端 ...
- exec , 元类,__new__, __call__ , 单例模式 , 异常
1,类也是对象 ''' 动态语言 可以在运行期间 动态生成类 修改对象属性 静态语言 ''''' ''' type(object_or_name, bases, dict) type(object) ...
- 739. Daily Temperatures
https://leetcode.com/problems/daily-temperatures/description/ class Solution { public: vector<int ...
- [转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法
问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示: 类型 说明 ID_User int 自动增长字段,用作该表的主键 UserName varcha ...
- 4 Template层 -模板继承
1.模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板 ...
- easyui 判断密码是否输入一致
1.首先要扩展validatebox,添加验证两次密码功能 $.extend($.fn.validatebox.defaults.rules, { eqPassword:{ validator:fun ...
- ASP.NET下调用ffmpeg与mencoder实现视频转换截屏
最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(a ...
- log4j2用asyncRoot配置异步日志是如何使用disruptor
用asyncRoot配置对应的对接disruptor类是AsyncLoggerConfigDisruptor,用Log4jContextSelector启动参数配置全局异步的对应的对接disrupto ...
- 微信小程序-----校园头条详细开发之注册登录
1.注册登录功能的实现 1.1结构 1.2 代码实现 1.2.1 为了通信的安全着想,在此我是通过小程序端获得code,然后传递给后端,在后端向微信后台发送api请求,解密,从而得到用户的唯一标示o ...
- Spring Cloud 目录
Spring Cloud Eureka Spring Cloud Config Spring Cloud Feign Spring Cloud Hystrix Spring Cloud Ribbon ...