LeetCode – 23. Merge k Sorted Lists

LeetCode – 23. Merge k Sorted Lists

23. Merge k Sorted Lists 

Problem’s Link

 —————————————————————————-

Mean: 

将k个有序链表合并为一个有序链表.

analyse:

方法一:本着不重复发明轮子的原则,使用两两合并,就可以利用前面已经做过的Merge two Sorted Lists.

方法二:抖机灵.将所有结点的val都push_back在一个vector容器中,排序后又重新构造链表.

Time complexity: O(N)

 

view code

方法一:

ListNode
*
mergeKLists(
vector
<
ListNode
*>
&
lists)
{


   
if(
lists
.
empty
()){


       
return
nullptr;

   
}

   
while(
lists
.
size()
>
1
){


       
lists
.
push_back(
mergeTwoLists(
lists
[
0
],
lists
[
1
]));

       
lists
.
erase(
lists
.
begin());

       
lists
.
erase(
lists
.
begin());

   
}

   
return
lists
.
front();


}


ListNode
*
mergeTwoLists(
ListNode
*
l1
,
ListNode
*
l2)
{


   
if(
l1
==
nullptr
){


       
return
l2;

   
}

   
if(
l2
==
nullptr
){


       
return
l1;

   
}

   
if(
l1
->
val
<=
l2
->
val
){


       
l1
->
next
=
mergeTwoLists(
l1
->
next
,
l2);

       
return
l1;

   
}

   
else
{


       
l2
->
next
=
mergeTwoLists(
l1
,
l2
->
next);

       
return
l2;

   
}


}

方法二:

/**


* —————————————————————–


* Copyright (c) 2016 crazyacking.All rights reserved.


* —————————————————————–


*       Author: crazyacking


*       Date  : 2016-02-18-09.02


*/


#include <queue>


#include <cstdio>


#include <set>


#include <string>


#include <stack>


#include <cmath>


#include <climits>


#include <map>


#include <cstdlib>


#include <iostream>


#include <vector>


#include <algorithm>


#include <cstring>


using
namespace
std;


typedef
long
long(
LL);


typedef
unsigned
long
long(
ULL);


const
double
eps(
1e-8);

// 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)

   
{


       
vector
<
int
>
nodeVal;

       
for(
auto
ptr:
lists)

       
{


           
while(
ptr)

           
{


               
nodeVal
.
push_back(
ptr
->
val);

               
ptr
=
ptr
->
next;

           
}

       
}

       
if(
nodeVal
.
size()
<=
0)

       
{


           
return
nullptr;

       
}

       
sort(
nodeVal
.
begin
(),
nodeVal
.
end());

       
bool
isFirst
=
1;

       
ListNode
*
res
=
nullptr
,
*
head
=
nullptr;

       
for(
auto
p:
nodeVal)

       
{


           
if(
isFirst)

           
{


               
isFirst
=
0;

               
head
=
new
ListNode(p);

               
res
=
head;

           
}

           
else

           
{


               
head
->
next
=
new
ListNode(p);

               
head
=
head
->
next;

           
}

       
}

       
return
res;

   
}


};

ListNode
*
getList(
vector
<
int
>&
arr)


{


   
bool
isFirst
=
1;

   
ListNode
*
res
=
nullptr
,
*
head
=
nullptr;

   
for(
auto
p:
arr)

   
{


       
if(
isFirst)

       
{


           
isFirst
=
0;

           
head
=
new
ListNode(p);

           
res
=
head;

       
}

       
else

       
{


           
head
->
next
=
new
ListNode(p);

           
head
=
head
->
next;

       
}

   
}

   
return
res;


}

int
main()


{


   
Solution
solution;

   
int n;

   
while(
cin
>>n)

   
{


       
vector
<
ListNode
*>
listVe;

       
while(n
)

       
{


           
int
num;

           
cin
>>
num;

           
vector
<
int
>
ve;

           
for(
int
i
=
0;
i
<
num;
++
i)

           
{


               
int
tmp;

               
cin
>>
tmp;

               
ve
.
push_back(
tmp);

           
}

           
listVe
.
push_back(
getList(
ve));

       
}

       
ListNode
*
head
=
solution
.
mergeKLists(
listVe);

       
while(
head)

       
{


           
cout
<<
head
->
val
<<
” “;

           
head
=
head
->
next;

       
}

       
cout
<<
“End.”
<<
endl;

   
}

   
return
0;


}


/*

*/

转载于:https://www.cnblogs.com/crazyacking/p/5200073.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109148.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql连接本地数据库

    sql连接本地数据库sql连接本地数据库安装好SQL2008后,界面只有已安装的包和正在运行的包左侧没有数据库,无法进行数据库操作.这是因为打开软件后,会提示连接一个东西,连接的时候按照默认的话就会连接错。如果出现提示连接成功后的界面只有两个文件夹“已安装的包”、“正在运行的包”,则是连接到了IntegrationServices,而非SQLServer数据库引擎。解决方法:在对象资源管理器中,选择…

    2022年5月18日
    110
  • strictmode android,Android StrictMode使用「建议收藏」

    strictmode android,Android StrictMode使用「建议收藏」StrictMode是Android提供的一个开发工具,用于检测一些异常的操作,以便开发者进行修复。StrictMode可以监控以下问题,不应该在应用主线程中完成的工作,包括磁盘读写、网络访问等。内存泄露,包括Activity泄露、SQLite泄露、未正确释放的对象等。使能StrictMode通常在Application和Activity的开始处(如onCreate)添加代码使能StrictMod…

    2022年5月2日
    101
  • char与byte的区别

    char与byte的区别很多初学者 包括我 已经学了一年多 java 了 肯会对 char 和 byte 这两种数据类型有所疑惑 相互混淆 今天特地查了好多资料 对 byte 和 char 两种数据类型进行了总结和比较 先将结果与大家分享 nbsp nbsp nbsp nbsp byte nbsp 是字节数据类型 nbsp 是有符号型的 占 1 nbsp 个字节 大小范围为 128 127 char nbsp 是字符数据类型 nbsp 是无符号型的 占 2 字节 Unicode 码 nbsp 大小范围 nbsp 是 0 65

    2025年7月5日
    5
  • 《算法图解》-9动态规划 背包问题,行程最优化

    《算法图解》-9动态规划 背包问题,行程最优化本文属于《算法图解》系列。学习动态规划,这是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题。一背包问题背包问题,在可装物品有限的前提下,尽量装价值最大的物品,如果物品数量足够大,简单的暴力穷举法是不可行的O(2ⁿ),前一章介绍了《贪婪算法》就是解决如何找到近似解,这接近最优解,但可能不是最优解。如何找到最优解呢?就是动态规划算法。动态规划先解决子问题,…

    2022年7月26日
    14
  • 单利模式的四种方式

    单利模式相关内容内容角色使用场景优点与单利模式功能相似的概念:全局变量、静态变量(方法)试问?为什么用单例模式,不用全局变量呢?答、全局变量可能会有名称空间的干扰,如果有重名的可能会被覆

    2022年3月29日
    42
  • idea在mac版怎么配置svn_IntelliJ Idea 集成svn 和使用

    idea在mac版怎么配置svn_IntelliJ Idea 集成svn 和使用最近公司的很多同事开始使用IntelliJIdea,便尝试了一下,虽然快捷键与eclipse有些不同,但是强大的搜索功能与“漂亮的界面”(个人认为没有eclipse好看),还是值得我们去使用的。刚开始使用的idea要去集成svn,下载公司的项目。我是用的是TortoiseSVN(小乌龟),下载后安装,然后记住安装路径,我安装的是64位的。TortoiseSVN的下载地址:htt…

    2022年10月17日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号