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


相关推荐

  • Linux怎么复制文件到其他文件夹

    Linux怎么复制文件到其他文件夹1.前言本文主要讲解linux怎么复制文件到其他文件夹。在Linux和Unix系统上工作时,复制文件和目录是您每天要执行的最常见任务之一。cp是一个命令行实用程序,用于复制Unix和Linux系统上的文件和目录。在本文中,我们将解释如何使用cp命令。linux怎么复制文件到其他文件夹2.如何使用cp命令cp命令的使用语法:cp[OPTIONS]源…目标源可以有一个或多个文件或目录作为参数,目标可以有一个文件或文件夹作为参数。当源和目标参数都是文件时,cp命令将第一

    2025年6月10日
    3
  • Ubuntu 定时执行脚本

    Ubuntu 定时执行脚本一、关于crontabcron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。在Ubuntu中,cron是被默认安装并启动的。二、例子直接上例子,来看看怎么用。需求:定时每天8点,自动执行保存在/root目录下hello.sh脚本1、方法很简单,只需编辑ect下crontab文件就行了,这个文件里存放的就是cron要执行的命令,以及定时执行的时间…

    2022年7月17日
    39
  • 笔记:别忘记varyonvg

    笔记:别忘记varyonvg

    2021年8月23日
    75
  • MBUS系列产品特点(科慧铭远)[通俗易懂]

    MBUS系列产品特点(科慧铭远)[通俗易懂]     北京科慧铭远自控技术有限公司联合国际标准化组织、计量中心、热力集团、清华大学检测与电子技术研究所,成立国内首家M-BUS通信设备检测中心,对于M-BUS主站、从站的通信设备全方位的检测其是否符合国际和国内标准,并予以认证。北京科慧铭远自控技术有限公司有着在M-BUS领域最全面的的研发和生产能力,获得国际标准化组织的认可,产品在欧洲、亚洲、中国获得全面应用。其生产的MBUS设备的主要…

    2022年10月10日
    2
  • 计算机病毒的活性,计算机病毒的特性

    计算机病毒的活性,计算机病毒的特性计算机病毒一般具有以下特性:1.计算机病毒的程序性(可执行性)计算机病毒与其他合法程序一样,是一段可执行程序,但它不是一个完整的程序,而是寄生在其他可执行程序上,因此它享有一切程序所能得到的权力。在病毒运行时,与合法程序争夺系统的控制权。计算机病毒只有当它在计算机内得以运行时,才具有传染性和破坏性等活性。也就是说计算机CPU的控制权是关键问题。若计算机在正常程序控制下运行,而不运行带病毒的程序,…

    2022年5月27日
    28
  • 传统波束形成的算法实现「建议收藏」

    传统波束形成的算法实现「建议收藏」最近学习了传统波束形成(CBF)的原理,尝试着写出识别一个单声源的波束形成程序。下面按照程序说明一下。1、初始化设置一些常数,例如抽样频率,所要计算的频率,时间步等。clearall;closeall;clc;%—————-初始化—————-%c=1500;%声速cfs=10000;%抽样频率fsT=0.1…

    2022年6月29日
    22

发表回复

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

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