Level:

  Hard

题目描述:

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6

思路分析:

  思路一:通过归并排序思想,将k个排好序的链表,归并成一条有序的链表。

  思路二:使用优先队列(priority_queue)实现堆,初始时将每个链表的第一个结点加入堆中,之后每次弹出堆顶元素,将这个结点指向的下一结点加入到堆中,直到所有结点添加完毕。

代码:

思路一:

public class Solution{
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null||lists.length==0)
return null;
int start=0;
int end=lists.length-1;
return sort(lists,start,end);
}
public ListNode sort(ListNode[]lists,int start,int end){
if(start==end)
return lists[start];
int mid=(start+end)/2;
ListNode l=sort(lists,start,mid);
ListNode r=sort(lists,mid+1,end);
return merge(l,r);
}
public ListNode merge(ListNode l,ListNode r){
if(l==null)
return r;
if(r==null)
return l;
if(l.val<r.val){
l.next=merge(l.next,r);
return l;
}else{
r.next=merge(l,r.next);
return r;
}
}
}

思路二:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution{
public ListNode mergeKLists(ListNode[] lists){
if(lists==null||lists.length==0)
return null;
PriorityQueue<ListNode>q=new PriorityQueue<>(lists.length,new Comparator<ListNode>(){
@Override
public int compare(ListNode o1,ListNode o2){
return o1.val-o2.val ;
}
});//构造小顶堆
for(ListNode node:lists){ //每个链表的第一个节点先加入堆
if(node!=null)
q.offer(node);
}
ListNode res=new ListNode(0);
ListNode cur=res;
ListNode temp=null;
while(!q.isEmpty()){
temp=q.peek();
q.poll();
cur.next=temp;
cur=cur.next;
if(temp.next!=null){
q.offer(temp.next);
}
}
return res.next;
}
}

61.Merge k Sorted Lists(合并k个排序链表)的更多相关文章

  1. 【LeetCode每天一题】Merge Two Sorted Lists(合并两个排序链表)

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  2. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...

  3. [Leetcode] Merge k sorted lists 合并k个已排序的链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...

  4. [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 ...

  5. 【LeetCode】23. Merge k Sorted Lists 合并K个升序链表

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,链表,单链表,题解,leetcode, 力扣,Py ...

  6. 【LeetCode】21. Merge Two Sorted Lists 合并两个有序链表

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,有序链表,递归,迭代,题解,leetcode, 力 ...

  7. 21. Merge Two Sorted Lists(合并2个有序链表)

    21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...

  8. 【LeetCode每天一题】 Merge k Sorted Lists(合并K个有序链表)

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  9. [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 ...

  10. 023 Merge k Sorted Lists 合并K个有序链表

    合并K个有序链表,并且作为一个有序链表的形式返回.分析并描述它的复杂度. 详见:https://leetcode.com/problems/merge-k-sorted-lists/descripti ...

随机推荐

  1. C中对整数的大端对齐与小端对齐的理解

    示例 /* 大端与小端对齐 说明: 1.对于arm, intel这种x86架构的复杂指令cpu,整数在内存中是 倒着存放的,低地址放低位,高地址放高位,称之为小端对齐 2.对于linux服务器的cpu ...

  2. Runtime-iOS运行时应用篇

    一.动态方法交换:Method Swizzling实现动态方法交换(Method Swizzling )是Runtime中最具盛名的应用场景,其原理是:通过Runtime获取到方法实现的地址,进而动态 ...

  3. AI-Tensorflow-神经网络优化算法-梯度下降算法-学习率

    记录内容来自<Tensorflow实战Google一书>及MOOC人工智能实践 http://www.icourse163.org/learn/PKU-1002536002?tid=100 ...

  4. rlogin - 远程注册

    SYNOPSIS(总览) rlogin [-8EKLdx ] [-e char ] [-l username ] host DESCRIPTION(描述) Rlogin 在远程主机 host 上开始 ...

  5. smbstatus - 报告当前 samba 的联接状态

    总览 smbstatus [-b] [-d] [-L] [-p] [-S] [-s configuration file] [-u username] 描述 此程序是 samba 套件的一部分. sm ...

  6. java 接口默认方法的使用

  7. jmeter 参数化3_User Defined Variables(用户自定义变量)

    User Defined Variables:  一般用于Test Plan中不需要随请求迭代的参数设置,如:Host.Port Number 操作路径:Thread Group-->Add-- ...

  8. BZOJ2839 集合计数 二项式反演

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2839 题解 二项式反演板子题. 类似于一般的容斥,我们发现恰好 \(k\) 个不怎么好求,但是 ...

  9. 测试md代码折叠功能

    展开查看 System.out.println("Hello to see U!");

  10. IO操作之ObjectInputStream与ObjectOutputStream

    之前写过DataInputStream和DataOutputStream,使用这两个类可以对java基本数据类型进行序列化和反序列化. 本篇再来两个新东西:ObjectInputStream,Obje ...