首页 > 其他分享 >23. 合并 K 个升序链表

23. 合并 K 个升序链表

时间:2023-04-02 10:35:33浏览次数:45  
标签:ListNode val 23 lists next 链表 升序

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i]升序 排列
  • lists[i].length 的总和不超过 10^4

关键思路点:将所有链表放入优先队列(小顶堆)中,然后每次拿最小的到结果链表中,再判断该节点是否还有节点,有的话再放回小根堆(熟悉优先队列的使用!!!)

/**
 * 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.length == 0) return null;

        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;
        PriorityQueue<ListNode> pq = new PriorityQueue<>(
            lists.length,(a,b) -> (a.val - b.val));
        
        for (ListNode head : lists) {
            if (head != null) {
                pq.add(head);
            }
        }

        while (!pq.isEmpty()) {
            ListNode node = pq.poll();
            p.next = node;
            if (node.next != null) {
                pq.add(node.next);
            }
            p = p.next;
        }
        return dummy.next;
    }
}

 

标签:ListNode,val,23,lists,next,链表,升序
From: https://www.cnblogs.com/fulaien/p/17280024.html

相关文章

  • 跨屏零代码saas建站平台2023.4.2发布更新
    跨屏零代码saas建站平台2023.4.2发布更新,主要更新了官网的UI,使其更加的简约,我们花了3年时间开发了这款零代码saas建站平台,然后正式运营以后,一直在致力于做简化工作,也就是化繁为简,不仅局限于官网的模板ui简化,以及用户的后台简化,注册登录、发布操作流程的简化,以及模板的简化。跨屏平......
  • 洛谷 P8762 [蓝桥杯 2021 国 ABC] 123 题解
    为什么可以使用前缀和,这里提供解释:初读题目,我们发现这个数列很迷惑,似乎不能使用数学方法来解。\[1,1,2,1,2,3,1,2,3,4,\cdots\]但是,我们可以想到数形结合的方式,我们将数列看作一个三角形,于是他变成了:\[1\]\[1,2\]\[1,2,3\]\[1,2,3,4\]\[\cdots\cdots\]于是本题变得好思......
  • [oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选
    中文编码GB2312回忆上次内容上次回顾了日韩各有编码格式日本有假名五十音一字节可以勉强放下 有日本汉字字符数量超过20000+  韩国有谚文数量超过500一个字节放不下 有朝鲜汉字字符数量超过20000+......
  • 南昌航空大学BLOG-1 (软件学院-22206123)
    一、前言本学期开展了面向对象程序设计这门课程,目前,我们已经在PTA上完成了三次Java大作业。第一次大作业一共九题,第二次大作业一共四题,第三次大作业一共七题。第一次作业主要是让我们熟悉并掌握基本的Java语法,如输入、输出的运用,import关键字的使用等,同时复习顺序结构、选择结构......
  • 2023年4月1日软工日报
    今天主要玩了,也学习了那个psotman   ......
  • 每日总结2023-04-01
    今天完成了部分界面并修改了部分之前的界面成果:广告收益界面,LIstView中没有数据,暂时没有显示第二个界面用于车主添加产品类别,登记种类和数量第三个界面美化第四个界面为设备绑定界面 ......
  • day32(2023.4.1)
    1.一对多应答型服务器 随后开启多个客户端,运行结果:    2.一对多聊天服务应用 随后开启多个客户端,运行结果:    3.UDP通信入门案例(创建服务端)了解即可 4.UDP通信入门案例(创建客户端)了解即可 运行结果:  day32(2023.4.1)星期六......
  • 2023/04/01每日总结
    今天学习html,发现web页面不会做,现在从头开始学。准备做一个课表 ......
  • IntelliJ IDEA 2023.1 版本添加了包中类的列表功能
    想知道在一个包下面有什么类。可以在新版的IntelliJIDEA2023.1中把鼠标移动到包上面。在包上面就可以看到这个包下面的类了。  这个功能还不错呢,能知道这个包下面有什么东西。https://www.ossez.com/t/intellij-idea-2023-1/14371......
  • 2023-04-01 图论问题建模和floodfill
    图论问题建模和floodfillfloodfill(洪泛)实际就是图的遍历1图论问题例子:判断二分图题目来源:LeetCode785is-graph-bipartite:,判断二分图,因为题目中已经给出了邻接表,相当于已经给出了Graph,所以直接用二分图的核心算法即可,参考DFS实现二分图检测实现代码2图的建模和二......