合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

思路:分治法

多个链表,两两合并,第一个和第二个合并,第三个和第四个合并....

如果链表的个数是奇数,最后一个先不处理,添加到这次处理完的链表队列后面

代码:

/**

* Definition for singly-linked list.

* public class ListNode {

*     int val;

*     ListNode next;

*     ListNode(int x) { val = x; }

* }

*/

class Solution {

public ListNode mergeKLists(ListNode[] lists) {

int n = lists.length;

if(n<1) return null;

if(n==1) return lists[0];

while(n>1){

int i;

for(i=0;i<n/2;i++){

lists[i] = mergeTwoLists(lists[i*2],lists[2*i+1]);

}

if(n%2==1){

lists[i] = lists[n-1];

n++;

}

n/=2;

}

return lists[0];

}

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

ListNode p = l1,q = l2;

int t=0;

ListNode result = new ListNode(0);

ListNode x = result;

while(p!=null||q!=null)

{

x.next = new ListNode(0);

x = x.next;

if(p!=null&&q!=null)

{

if(p.val<=q.val)

{

x.val = p.val;

p = p.next;

}

else

{

x.val = q.val;

q = q.next;

}

}

else if(p!=null)

{

x.val = p.val;

p = p.next;

}

else

{

x.val = q.val;

q = q.next;

}

}

return result.next;

}

}

Leetcode--23.合并K个排序链表(Java)相关推荐

  1. LeetCode 23. 合并K个排序链表(优先队列)

    文章目录 1. 题目信息 2. 思路 3. 代码 1. 题目信息 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例:输入: [1->4->5,1->3-& ...

  2. leetcode 23. 合并K个排序链表

    题目 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1 ...

  3. 【LeetCode刷题】23. 合并K个排序链表

    23. 合并K个排序链表 题目 思路1 - 普通思路 思路2 - 逐一比较 思路3 – 逐一两两合并 思路4 – 优先级队列(小顶堆) 思路5 – 分治策略 题目 链接:23. 合并K个排序链表 合并 ...

  4. [分治] leetcode 23 合并K个升序链表

    [分治] leetcode 23 合并K个升序链表 1.题目 题目链接 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例1: 输入:lists ...

  5. leetcode **23. 合并K个升序链表(2020.4.26)

    [题目]**23. 合并K个升序链表 21.合并两个有序链表 **23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4-& ...

  6. LeetCode题解-23 合并K个排序链表 Hard

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2 ...

  7. 23. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  8. LeetCode 23合并K个升序链表24两两交换链表中的节点

    维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...

  9. 优先队列之Leetcode 23合并K个有序链表

    优先队列要点复习 这在之前专门写过一篇文章讲优先队列的使用方法: 优先队列的优先级设置法 对于优先队列,我们首先需要知道,它的底层是堆,或者说优先队列是堆的一种别称.堆自然就分成了两个方向: 大顶堆 ...

  10. 82. Leetcode 23. 合并K个升序链表 (排序)

    给你一个链表数组,每个链表都已经按升序排列.请你将所有链表合并到一个升序链表中,返回合并后的链表.示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3 ...

最新文章

  1. 查单个值用什么resultset_视光门诊日记—为什么两个医院查的视力不一样
  2. 想成为嵌入式程序员应知道的0x10个基本问题
  3. 计算机与外部设备通讯的接口,总线接口与计算机通信(四)USB外部总线(初级认识)...
  4. NameError: name ‘__file__‘ is not defined的问题原因及解决方法
  5. this指向_前端必须知道的this指向问题
  6. linux环境systwm.img解包,[教程] system.img解包打包的方法,方便菜鸟们制作直刷ROM...
  7. java中阻止类的继承
  8. java web个人博客开发(一需求获取和需求分析文档)
  9. Arping协议以及使用方法
  10. 软件测试bug文章,软件测试技术之说一个让你印象最深的bug?
  11. 调用getParameterValues(String name)获取表单的信息
  12. 最科学 最舒服 【色彩搭配】 平面设计师必备
  13. shell间接变量引用两种方式
  14. python解释器中help的用法
  15. python定义一个字符串变量_python基础入门语法和变量类型(一)
  16. 互联网公司那些价值观-阿里巴巴
  17. 获得屏幕的宽度和高度
  18. android 各国时区
  19. 奢侈品行业数字化也要保持优雅
  20. RSA解密失败:javax.crypto.BadPaddingException : Decryption error

热门文章

  1. 01.神经网络和深度学习 W1.深度学习概论
  2. 数据结构--位图 BitMap
  3. win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...
  4. 9.数据库中的子查询
  5. oracle自增自删分区的脚本,oracle实现自增方法(错误ora-04098解决)
  6. java执行程序默认多线程吗_Java多线程 执行程序(1)
  7. 快手搜索技术部招聘NLP算法工程师!
  8. 美团客户端响应式框架 EasyReact 开源啦
  9. Hades:移动端静态分析框架
  10. 论文浅尝 | 知识图谱相关实体搜索