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 ...
随机推荐
- The 2016 ACM-ICPC Asia Shenyang Regional Contest
A. Thickest Burger 大数 × 2 + 小数 #include <cstdio> #include <algorithm> using namespace st ...
- P3398 仓鼠找sugar(树链剖分)
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 第2章c++简单程序设计
第2章c++简单程序设计 知识梳理 以下是我遗忘以及认为重要的知识整理: 1.标识符的构成规则: 以大写字母.小写字母或下划线 _ 开始 由大写字母.小写字母.下划线 _ 或数字(0~9)组成 大写字 ...
- mongoTemplate聚合操作Demo
package com.tangzhe.mongodb.mongotemplate; import com.mongodb.BasicDBObject; import com.mongodb.DBOb ...
- 使用 Sconfig.cmd 配置服务器核心服务器
使用 Sconfig.cmd 配置服务器核心服务器 适用对象:Windows Server 2012 R2, Windows Server 2012 在 Windows Server 2012 中,你 ...
- IOS开发学习笔记018- 一般控件的使用
1.移动 2.动画 3.缩放 3.旋转 4.简化代码 5.总结 UIButton 的两种状态 normal highlighted 1.移动 OC语法规定:不允许直接修改某个对象中结构体属性的成员. ...
- 转载: CRichEditCtrl使用大全
richedit 常见使用问题 一.常见问题 a.可以编译,不能执行的 在需要在相应的对话框中加上InitInstance(void)函数中添加 AfxInitRichEdit(); b.升级默认的R ...
- 基于web自动化测试框架的设计与开发(讲解演示PPT)
- XMind8 Pro激活
最近使用XMind8 还不错,奈何更多功能是需要升级8Pro才能使用,现已经激活成功,记录下过程: 1.下载XMind8 Update4并且安装,此安装过程简单[安装包太大,无法上传,正在想办法] 2 ...
- CentOS6.4编译Hadoop-2.4.0
因为搭建Hadoop环境的时候,所用的系统镜像是emi-centos-6.4-x86_64,是64位的,而hadoop是默认是32的安装包.这导致我们很多操作都会遇到这个问题(Java HotSp ...