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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【一个整蛊人的小程序】c++,鼠标控制

    【一个整蛊人的小程序】c++,鼠标控制

    2021年3月12日
    211
  • 使用JS访问本地数据库「建议收藏」

    使用JS访问本地数据库「建议收藏」1前言有时候,数据业务比较大,比如查询百万级的数据,如果使用JSP查询数据库,JSP的返回结果一般放在域名后面返回给客户端,而返回结果的长度是有限制的,数据过长可能会丢失部分数据;另一方面数据量大,占用带宽大,网络延时较长。使用JS绕过后台Web服务器,直接访问本地数据库服务器,虽然会有些不安全,但却能够访问大数据,并且不占用带宽。2案例在本地SQLServer建立数据库tes…

    2022年5月22日
    39
  • java wsdl asmx 替换_WebService asmx生成的wsdl 修改 location

    java wsdl asmx 替换_WebService asmx生成的wsdl 修改 locationC#中使用webservice接口的时候,返给服务器的IP地址是带上了端口号的。但是有时候不能要那个端口(比如用nginx做了转发),就需要在服务端处理一下(处理内容就是后面的代码)。此外,需要在配置文件中web.config中的system.web中添加一些东西:2.如果没有protocols中的内容的话,有可能post和get请求不能被正确识别(未做过验证,只是在博客园上看见过类似问题)。代码…

    2022年5月29日
    73
  • SDR SDRAM控制器设计[通俗易懂]

    SDR SDRAM控制器设计[通俗易懂]目录前言1、关于刷新2、关于数据中心对齐3、SDRAM芯片手册介绍3.1SDRAM芯片的管脚3.2SDRAM指令集3.3模式寄存器3.4关于SDRAM上电初始化和装载模式寄存器3.5SDRAM刷新时序3.6关于写访问3.7关于突发访问4、FPGA工程设计5、仿真测试5.1仿真模型5.2testbench前言工作中…

    2022年7月25日
    30
  • 小米6解BL锁教程申请BootLoader解锁教程

    小米6解BL锁教程申请BootLoader解锁教程*小米6线刷兼救砖_解账户锁_纯净刷机包_教程*远程解锁一、准备工作1、注册小米账号:点击注册(已有小米账号请忽视)2、在手机中登陆【小米账号】3、下载并解压【小米解锁工具】或点击这里下载安装二、开始解锁1打开【小米解锁官网】:http://www.miui.com/unlock/,点击【立即解锁】,输入【小米账号】,点击【立即登录】,填写好上诉信息后,…

    2022年5月23日
    106
  • Zookeeper分布式锁代码实现[通俗易懂]

    目录原生API操作ZKWatch机制分布式锁思路Zookeeper分布式锁的代码实现zkclientCurator原生API操作ZK什么叫原生API操作ZK呢?实际上,利用zookeeper.jar这样的就是基于原生的API方式操作ZK,因为这个原生API使用起来并不是让人很舒服,于是出现了zkclient这种方式,以至到后来基于Curator框架,让人使用ZK…

    2022年4月12日
    44

发表回复

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

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