《算法通关村——解析堆在合并K个排序链表的应用》

news2024/10/6 2:27:06

《算法通关村——解析堆在合并K个排序链表的应用》

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 = [[]]
输出:[]

这里直接给代码,我们来理解

/**
 * 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> q = new PriorityQueue<>(Comparator.comparing(node -> node.val));
        /*
        理解下面这个循环,只是把每个链表的第一个数放入最小堆中。
        */
        for(int i = 0;i< lists.length;i++){
            if(lists[i] != null){
                q.add(lists[i]);
            }
        }
        /*
        理解下面这个循环,首先就是把上面的每个链表的第一个元素进行了一个排序,然后把那个最小的元素的链表拿出来,把它放入我们定义的新的链表的下一个节点,判断他是否有下一个节点,如果有下一个节点,那么就把他放入最小堆里面去(此时堆会重新排序),然后再进行下一次循环,从最小堆中取元素。其实理解这里最重要就是要知道链表初始就是排好序的。
        */

        ListNode dummy = new ListNode(0);
        ListNode tail = dummy;
        while(!q.isEmpty()){
            tail.next = q.poll();
            tail = tail.next;
            if(tail.next != null){
                q.add(tail.next);
            }
        }
        return dummy.next;
    }
}

画图理解:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新型信息基础设施下的IP追溯技术:构建数字化安全新境界

随着新型信息基础设施的快速发展&#xff0c;IP&#xff08;Internet Protocol&#xff09;追溯技术在数字化安全领域变得愈发重要。IP追溯不仅能够帮助识别网络攻击源&#xff0c;提升网络安全水平&#xff0c;还有助于数字证据追踪、合规性审计等方面。本文将探讨新型信息基础…

【转】ORB-SLAM2调用OAK-D双目摄像头进行点云建图

编辑&#xff1a;OAK中国 首发&#xff1a;A. hyhCSDN 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容来自用户的分享&#xff0c;如有疑问请与原作者交流&#xff01; ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手君。 近期在CSDN刷…

2019年2月25日 Go生态洞察:Go 1.12 版本发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

BP算法推导

例子1&#xff1a; 例子2&#xff1a; 例子3&#xff1a;

好用的png图片打包plist工具,推荐使用pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.e…

【23真题】大题全原题的211!题源已定位!

今天分享的是23年长安大学814的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年长安大学814考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题难度中等偏下&#xff0c;题量偏多&#xff0c;考察的知识点也是很常见的…

CAD与 PDM系统如何协同工作的?

在产品研发中&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;和PDM&#xff08;产品数据管理&#xff09;是两个核心的工具&#xff0c;它们在产品从设计到制造的整个生命周期中发挥着重要的作用。虽然这两个工具在功能上有所不同&#xff0c;但它们在使用上却有着密切…

中科驭数受邀出席2023 ODCC冬季全会,共谋开放数据中心创新发展

近日&#xff0c;2023年开放数据中心委员会&#xff08;简称“ODCC”&#xff09;冬季全会在宁夏银川成功召开&#xff0c;中科驭数作为ODCC的新成员单位&#xff0c;受邀出席本次重要会议。 ▲ 中科驭数正式加入ODCC开放数据中心委员会 开放数据中心委员会是在中国通信标准化…

宏工科技通过CMMI三级认证,软件研发能力获国际权威认可

近日&#xff0c;宏工科技子公司湖南宏工软件成功通过CMMI三级认证并正式获得资质证书&#xff0c;斩获全球软件领域最权威的认证之一&#xff0c;标志着宏工科技在软件技术开发、研发管理、项目管理等多方面获得国际权威认证。 CMMI全称是Capability Maturity Model Integrati…

echarts 通用线性渐变堆叠面积图

echarts 通用线性渐变堆叠面积图 getLineData2() {const myChart echarts.init(this.$refs.chartDom);const option {tooltip: {trigger: axis,},legend: {show: false,textStyle: {fontSize: 14, //字体大小color: #ffffff, //字体颜色},data: [AAA, BBB],},grid: {show: tr…

注意力机制(Q,K,V)基本概念

文章目录 一、注意力提示1.1概念1.2生活中的注意力提示1.3注意力机制基本框架小结 二、注意力汇聚2.1概念2.2非参注意力汇聚2.2.1平均汇聚2.2.2Nadaraya-Waston核回归 2.3通用注意力汇聚公式2.4带参数注意力汇聚小结 三、注意力评分函数3.1概念3.2例子 四、遮蔽softmax三四小结…

echarts 自定义提示样式

在setOption中添加自定义样式 tooltip: {trigger: axis,formatter: (params)> {// console.log(params);var result if(params[0] && params[1]){result 发电量对比<div style"background:#F4F7FC;padding:5px;margin:5px 0px;border-radius:6px"&…

《微信小程序开发从入门到实战》学习三十二

3.5 开发我的投票页面与使用tab栏切换页面 实现很简单&#xff0c;简单的列表页面&#xff0c;但是需要加在tabBar那里&#xff0c;加油。 3.5.1 开发我的投票页面 在app.js里的pages的数组里加上"pages/myVote/myVote"&#xff0c;保存了后出现了myVote文件夹。 …

如何快速检测硬盘健康程度?

当我们使用Windows11/10/8/7计算机时&#xff0c;可能会遇到各种各样的问题&#xff0c;比如蓝屏报错、系统崩溃或其他运行不正常的状况。很多时候都是因为硬盘错误或故障导致的。那么&#xff0c;我们该如何快速检测硬盘健康程度呢&#xff1f; 在驱动器属性中执行硬盘查错 硬…

英语语法:连词or, and, if, unless怎么用?

连词or, and, if, unless怎么用&#xff1f;1. or conj. 或者&#xff0c;还是&#xff0c; 和&#xff0c; 否则用法&#xff1a;并列连词①当“或者&#xff0c;还是”讲时&#xff0c;用在选择疑问句中&#xff0c;是选择疑问句的标志例&#xff1a;Are you a teacher or a …

GNSS接收机 高精度GNSS接收机 4GGNSS接收机

GNSS接收机TN521 ★多频多系统个高精度定位&#xff0c;支持GPS L1/L2&#xff0c;BD B1/B2&#xff0c;支持北斗三代 ★外置GNSS、4G天线 ★平面精度2.5mm 1ppm RMS&#xff0c;高程精度511ppm RMS ★监测终端内嵌工业级智能平台 ★支持4G全网通、全面支持移动/联通/电信…

数据库应用:MongoDB 数据备份与恢复

目录 一、实验 1.MongoDB 数据库备份与恢复 2.MongoDB 数据表备份与恢复 二、问题 1.MongoDB有哪些命令行工具实现数据备份与恢复 一、实验 1.MongoDB 数据库备份与恢复 &#xff08;1&#xff09;查看版本 rootnode1:~# mongo --version&#xff08;2&#xff09;准备…

NX二次开发UF_CURVE_create_arc_center_tangent 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_center_tangent Defined in: uf_curve.h int UF_CURVE_create_arc_center_tangent(tag_t center, tag_t tangent, UF_CURVE_help_data_p_t help_data_p, UF_CUR…

Python语言创建爬虫代理IP池详细步骤和代码示例

目录 一、引言 二、代理IP的选择 三、使用代理IP的代码示例 四、创建代理IP池的代码示例 五、总结 一、引言 在爬虫程序中&#xff0c;代理IP的使用是避免IP被封禁、提高爬取效率的重要手段。本文将详细介绍如何使用Python语言创建一个爬虫代理IP池&#xff0c;包括代理I…

每日一练2023.11.27———连续因子【PTA】

题目要求&#xff1a; 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff0c;其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N&#xff0c;要求编写程序求出最长连续因子的个数&#xff0c;并输出最小的连续因子序列。 输入格式&#xff…