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 ...
随机推荐
- 初学Python不知道做什么项目好?来看看练手项目如何?
对于初学者来说,在学习编程的初期,由于基础知识点的学习是比较无聊的,所以大家可能会有所反感,为了减弱大家的反感,我给大家带来一个简单的小项目——实现屏保计时器,这个项目就算是刚学Python的小伙伴, ...
- POJ1426-Find The Multiple(搜索)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42035 Accepted: 176 ...
- Kali 远程登陆SSH
一.配置SSH 编辑/etc/ssh/sshd_config 将#PasswordAuthentication no的注释去掉,将NO修改为YES //可以用密码登陆 将PermitRootLogin ...
- [转]using components in Cakephp 2+ Shell
<?php App::uses('AppShell', 'Console/Command'); App::uses('ComponentCollection', 'Controller'); A ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- WebApi 跨域
http://www.cnblogs.com/lori/p/3557111.html http://bbs.csdn.net/topics/391020576
- [转]jQuery DOM Ready
一直以来,各种JS最佳实践都会告诉我们,将JS放在HTML的最后,即</body>之前,理由就是:JS会阻塞下载,而且,在JS中很有可能有对DOM的操作,放在HTML的最后,可以尽可能的保 ...
- junit4 assert类中的assert方法总结
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...
- maven学习(十五)——在eclipse中使用maven创建javaweb项目
一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示:
- Sql数据表中的关系