leetcode hot100【LeetCode 23. 合并K个升序链表】java实现

LeetCode 23. 合并K个升序链表

题目描述

合并 k 个升序链表,返回合并后的链表。链表的节点数值按升序排列。

示例:

复制代码
输入:lists = [[1,4,5], [1,3,4], [2,6]]
输出:[1,1,2,3,4,4,5,6]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4

Java 实现解法

方法一:优先队列(最小堆)
java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if (lists == null || lists.length == 0)
            return null;
        PriorityQueue<ListNode> minHeap = new PriorityQueue<>((a, b) -> a.val - b.val);
        for (ListNode node : lists) {
            if (node != null) {
                minHeap.add(node);
            }
        }
        ListNode dummy = new ListNode(0);
        ListNode curr = dummy;
        while (!minHeap.isEmpty()) {
            ListNode minNode = minHeap.poll();
            curr.next = minNode;
            curr = curr.next;
            if(minNode.next != null){
                minHeap.add(minNode.next);
            }
        }
        return dummy.next;
    }
}

解题思路

  • 优先队列(最小堆) :使用一个最小堆来存储所有链表的头节点,按照节点的值来排序。
    • 初始化最小堆,将所有链表的头节点加入堆中。
    • 每次从堆中取出最小的节点,将其添加到结果链表中,然后将该节点的下一个节点加入堆中。
    • 重复这个过程,直到所有节点都被取出并合并。

这种方法的时间复杂度是 O(N log k),其中 N 是所有链表中节点的总数,k 是链表的数量。空间复杂度是 O(k),因为我们需要存储所有链表的头节点在堆中。这种方法利用了优先队列来高效地找到最小的节点并合并,是解决多个有序链表合并问题的高效方法。

相关推荐
HanhahnaH5 分钟前
Spring集合注入Bean
java·spring
未定义.22111 分钟前
电子削铅笔刀顺序图详解:从UML设计到PlantUML实现
java·软件工程·uml
雾月5528 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
OpenC++1 小时前
【C++QT】Buttons 按钮控件详解
c++·经验分享·qt·leetcode·microsoft
24k小善1 小时前
Flink TaskManager详解
java·大数据·flink·云计算
想不明白的过度思考者2 小时前
Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
java·开发语言
.生产的驴2 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
猿周LV2 小时前
JMeter 安装及使用 [软件测试工具]
java·测试工具·jmeter·单元测试·压力测试
晨集2 小时前
Uni-App 多端电子合同开源项目介绍
java·spring boot·uni-app·电子合同
时间之城2 小时前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel