leecode刷题(27)-- 合并k个排序链表

合并k个排序链表

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

示例:

输入:

[

1->4->5,

1->3->4,

2->6

]

输出: 1->1->2->3->4->4->5->6

思路

以前做过合并两个有序链表的问题,所以刚开始想到的解法与之类似,我们可以先合并两个有序链表,再用合并的新链表去合并第三个链表:

1->1->3->4->4->5

1->1->2->3->4->4->5->6

其实如果我们学习过堆相关的知识,还可以用最小堆来解决这个问题:

读取所有链表值

构造一个最小堆(python中有 headp 方法,java中有 PriorityQueue 方法

根据最小堆构造一个链表

代码如下

python 描述

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

from heapq import heapify, heappop

class Solution:

def mergeKLists(self, lists: List[ListNode]) -> ListNode:

# 读取所有节点值

h = []

for node in lists:

while node:

h.append(node.val)

node = node.next

if not h:

return None

# 构造一个最小堆

heapify(h) # 转换为最小堆

# 构造链表

root = ListNode(heappop(h))

curnode = root

while h:

nextnode = ListNode(heappop(h))

curnode.next = nextnode

curnode = nextnode

return root

java 描述

/**

* Definition for singly-linked list.

* public class ListNode {

* int val;

* ListNode next;

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

* }

*/

class Solution {

public ListNode mergeKLists(ListNode[] lists) {

// 读取所有节点值

List h = new ArrayList();

for (ListNode node: lists) {

while (node != null) {

h.add(node.val);

node = node.next;

}

}

// 构造一个最小堆

if (!h.isEmpty()) return null;

PriorityQueue priorityQueue = new PriorityQueue();

// 将元素添加进最小堆中

for (Integer h1: h) {

priorityQueue.offer(h1);

}

//构造链表

ListNode root = priorityQueue.poll();

ListNode curNode = root;

while (!priorityQueue.isEmpty()) {

ListNode nextNode = priorityQueue.poll();

curNode.next = nextNode;

curNode = nextNode;

}

return root;

}

}

总结

上述 python 的代码能通过提交,但是 java 代码部分我快被类型转换弄晕了,代码不能通过运行,这里只是给出一种思路,日后有时间自己会再完善的,写下来也是当作自己学习记录的一部分,希望看到文章的小伙伴能帮忙指出本人的不足。

合并k个有序链表 python_leecode刷题(27)-- 合并k个排序链表相关推荐

  1. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)

    leetcode刷题笔记-114. 二叉树展开为链表(java实现) 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 rig ...

  3. 力扣刷题之合并两个有序数组

    力扣刷题之合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nu ...

  4. 【小f的刷题笔记】(JS)链表 - 合并 k 个有序链表 LeetCode23 - 顺序合并暴力三种方法

    [链表] 合并 k 个有序链表:

  5. leetcode刷题:合并两个有序链表

    题目: 分析思路: 1.新建一个哨兵结点,到时用于返回合并后新链表的头结点. 2.while循环,直到有一点链表到结尾为止 3.把非空的链表绑定到合并结点的尾部,并返回合并后链表的头结点. 代码如下: ...

  6. python两个数组合并、找出中位数_leetcode刷题记录-找出这两个有序数组的中位数(python版本)...

    谨以此文记录一下自己刷题的过程,虽然技术能力一般,相信刷完整套题目自己的编程能力定会有提高,代码都是个人创作,不一定是最好的,仅供参考和交流 给定两个大小为 m 和 n 的有序数组 nums1 和 n ...

  7. 算法入门刷题笔记 Day2 K - Coat of Anticubism L - Five-In-a-Row M - Island Puzzl......

    写在前面 好久没更新公众号和博客了,因为最近在研究新的方向,所以很少发文. 笔者接触编程只有一年,这一年间主要研究启发式算法在运筹学中的应用.但是由于编程基础薄弱,在进一步研究复杂运筹学问题时发现基础 ...

  8. LeetCode779 第K个语法符号 python刷题Day5

    779.第K个语法符号 差一点今天就前功尽弃了,瘫在沙发上一时爽,一直瘫着废到老.想想昨天被一道评级为简单的题困住了.虽然我上学上的久,但我学的东西少啊.好了,开正题了,士可以一日不食而不能半日不学. ...

  9. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...

    今天,我们要来讲讲排序问题,这次讲的排序算法主要是归并排序,堆排序和桶排序. 归并排序 归并一词在中文的含义就是"合并,并入"的意思,在数据结构里面就是将两个或者两个以上的有序数组 ...

  10. 算法入门刷题笔记 Day10 - A - 拓扑排序·一 -- D - K-th Path

    写在前面 好久没更新公众号和博客了,因为最近在研究新的方向,所以很少发文. 笔者接触编程只有一年,这一年间主要研究启发式算法在运筹学中的应用.但是由于编程基础薄弱,在进一步研究复杂运筹学问题时发现基础 ...

最新文章

  1. 智能集群理论优化控制_无人机集群对抗研究的关键问题
  2. 共享单车数据集_共享单车数据可视化报告
  3. SpringBoot默认日志logback配置解析
  4. POS机刷卡机招商加盟企业网站源码
  5. oracle的reliable message等待事件
  6. idea设置类多行显示_IDEA 常用设置
  7. 软件汉化工具:eXeScope
  8. Win7双屏显示设置
  9. 屋面光伏荷载计算机构,有关光伏发电屋顶荷载以及预判方法
  10. java 读取pdf表格_在Java中使用tabula提取PDF中的表格数据
  11. winhex查看mysql_使用WINHEX查看innodb的BTree高度
  12. 全网最易懂的Flink背压问题,看不懂你打我~
  13. 独家-县域统计年鉴Excel版(2000-2021年)-包含县市及乡镇卷
  14. js把日期字符串转换成时间戳 阿星小栈
  15. C语言实现双向非循环链表(不带头结点)的基本操作
  16. Ubuntu20.04开放指定端口
  17. 信息学奥赛的“一二三四”
  18. Postman发送一个请求
  19. WIN2003安装SQL2000时验证CDKEY
  20. Docker Swarm 快速入门

热门文章

  1. Python全栈之路系列之列表数据类型
  2. 编码风格之变量的命名规则
  3. JS 表单submit() 提交无效的问题
  4. s3c2440的pwm输出
  5. 关系分析可视化插件-Cytoscape
  6. Python使用matplotlib可视化模拟班级学生分数柱状图和折线图
  7. tp5.0 根据经纬度 获取附近信息_Redis怎么实现查找附近的人之数据类型Geospatial...
  8. hive 建表_大数据面试必备 | Hive数据仓工具面试题!
  9. iphone新旧手机数据传输已取消_iPhone 手机支付宝自动扣费?取消服务提示“无法解约”?...
  10. 真正解决:gpg --verify sig: 无法检查签名:找不到公钥