详解 leetcode_078. 合并K个升序链表.小顶堆实现

news/发布时间2024/5/14 15:42:31

/*** 构造单链表节点*/
class ListNode{int value;//节点值ListNode next;//指向后继节点的引用public ListNode(){}public ListNode(int value){this.value=value;}public ListNode(int value,ListNode next){this.value=value;this.next=next;}
}package com.ag;
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;/***  leetcode_078. 合并K个升序链表*  解题思路:*  1.定义小根堆的大小为K,然后从每个链表拿一个元素进来构造最小堆*  2.取走堆顶元素(一定是最小值)插入到新链表的表尾,然后将该元素所在的链表再拿一个元素进来,重新构造小顶堆**/
public class MergeKASCList {public ListNode mergeKLists(List<ListNode> lists){//1.判断边界if(lists==null||lists.size()==0){return null;}//2.构造最小堆Queue<ListNode> minHeap=new PriorityQueue<>((o1, o2) -> o1.value-o2.value);for (ListNode listNode : lists) {if(listNode!=null){minHeap.offer(listNode);//元素入堆}}//3.构造合并后的新链表ListNode head=new ListNode(0);ListNode tail=head;while (!minHeap.isEmpty()){//堆顶元素出堆,获取链表最小节点,加入新链表队尾tail.next=minHeap.poll();tail=tail.next;if(tail.next!=null){minHeap.offer(tail.next);//最小链表节点的下一个节点加入最小堆 (重新构造小顶堆)}}return head.next;}public static void main(String[] args) {List<ListNode> lists=new ArrayList<>();//1.初始化各个节点ListNode node1=new ListNode(1);ListNode node2=new ListNode(4);ListNode node3=new ListNode(5);ListNode node4=new ListNode(1);ListNode node5=new ListNode(3);ListNode node6=new ListNode(4);ListNode node7=new ListNode(2);ListNode node8=new ListNode(6);//2.构建节点之间的引用node1.next=node2;node2.next=node3;node4.next=node5;node5.next=node6;node7.next=node8;//打印链表
//        printLinkedList(node1);
//        printLinkedList(node4);
//        printLinkedList(node7);//3.将链表头节点添加到listlists.add(node1);lists.add(node4);lists.add(node7);//4.合并链表MergeKASCList mergeKASCList=new MergeKASCList();ListNode listNode=mergeKASCList.mergeKLists(lists);//5.打印合并后的链表printLinkedList(listNode);}/*** 打印链表* @param head*/public static void printLinkedList(ListNode head) {List<String> list = new ArrayList<>();while (head != null) {list.add(String.valueOf(head.value));head = head.next;}System.out.println(String.join(" -> ", list));}
}

输出结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

stm32——hal库学习笔记(串口<一>)

这里写目录标题 一、数据通信的基础概念&#xff08;了解&#xff09;1.1&#xff0c;串行/并行通信1.2&#xff0c;单工/半双工/全双工通信1.3&#xff0c;同步/异步通信1.4&#xff0c;波特率1.5&#xff0c;常见的串行通信接口 二、串口(RS-232)&#xff08;熟悉&#xff09…

docker (八)-dockerfile制作镜像

一 dockerfile dockerfile通常包含以下几个常用命令&#xff1a; FROM ubuntu:18.04 WORKDIR /app COPY . . RUN make . CMD python app.py EXPOSE 80 FROM 打包使用的基础镜像WORKDIR 相当于cd命令&#xff0c;进入工作目录COPY 将宿主机的文件复制到容器内RUN 打包时执…

阿里云香港网络线路类型BGP(多线)精品延迟测试

阿里云香港等地域服务器的网络线路类型可以选择BGP&#xff08;多线&#xff09;和 BGP&#xff08;多线&#xff09;精品&#xff0c;普通的BGP多线和精品有什么区别&#xff1f;BGP&#xff08;多线&#xff09;适用于香港本地、香港和海外之间的互联网访问。使用BGP&#xf…

防御保护---防火墙的病毒防御

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.防病毒网关&#xff08;AV&#xff09;概述 防火墙的防病毒网关&#xff08;AV&#xff09;是一种网络安全设备&#xff0c;用于检测和阻止恶意软件&#xff08;如病毒、蠕虫、木马等&#x…

【计算机网络】一些乱七八糟内容

MAC Media Access Control 用于在局域网&#xff08;LAN&#xff09;或广域网&#xff08;WAN&#xff09;中实现设备自动接入网络 "载波侦听多路访问"(Carrier Sense Multiple Access) CSMA/CD 是CSMA的升级版本&#xff0c;加入了序列号检测机制。 CSMA/CA 是CSM…

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示&#xff1a; 一座大型建筑物…

Vue 全组件 局部组件

一、组件定义和使用 1、全局组件 定义 <template> <div> <h1>This is a global component</h1> </div> </template> <script lang"ts"> </script> <style></style> 导入 全局组件在main.ts&#xff…

HarmonyOS 实战开发案例-仿抖音短视频应用

前段时间看到一篇文章&#xff0c;但是没有源码&#xff0c;是一个仿写抖音的文章&#xff0c;最近也在看这块&#xff0c;顺便写个简单的短视频小应用。 技术点拆分 1、http请求数据&#xff1b; 2、measure计算文本宽度&#xff1b; 3、video播放视频&#xff1b; 4、onT…

项目中组织结构的画法

一、ppt中绘制项目组织结构的办法以及注意事项 步骤1&#xff1a;在技术本中输出你需要的项目人员层级结构 注意点&#xff1a;通过键盘上的TAB键进行层级设置 项目领导小组项目经理运维小组技术支持小组项目服务小组应急服务小组服务支持小组技术总监网络安全负责人步骤2&a…

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

文章目录 1. 写在前面2. 环境搭建2. 加密定位实战 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关…

watch和watchEffect之间的小关系

在vue3中&#xff0c;有watch和watchEffect是用于监听数据的两种方式&#xff0c;本次主要讲解两者的区别 一、watch属性 1.参数 watch包含三个参数&#xff1a; 1).监听的属性 2).回调函数 在回调函数中又包含两个参数oldValue和newValue&#xff0c;分别是修改前的数据…

169基于matlab的小波神经网络预测

基于matlab的小波神经网络预测&#xff0c;通过权值参数更新得到误差较小模型&#xff0c;进行多输出单输出预测。输出预测可视化结果。程序已调通&#xff0c;可直接运行。 169matlab小波神经网络预测 多输入单输出 (xiaohongshu.com)

Electron基本介绍

Electron基本介绍 Electron 官方网站&#xff1a;https://www.electronjs.org/zh/ Electron安装方法&#xff1a;npm install electron -g 全局安装 Electron简介&#xff1a;Electron提供了丰富的本地&#xff08;操作系统&#xff09;API&#xff0c;使你能够使用纯JavaScr…

TiDB 在医疗保障信息平台的应用实践

文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合&#xff0c;成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中&#xff0c;TiDB 分布式数据库有效实现了在线交易和实时分析服务&#xff0c;日…

Mac远程连接Windows 11

1. Windows配置 1.1 打开远程连接权限 打开“控制面板”搜索“远程”&#xff0c;选择“允许远程访问你的计算机”这一项。 1.2 添加远程连接用户 打开“计算机管理”&#xff0c;并在用户下新增“新用户”&#xff0c;share是我自己使用的名字&#xff0c;这个名字不固定随…

Spring Boot 笔记 018 创建接口_文章列表(分页)

1.1 分页查询 1.1.1 创建pageBean封装分页的数据 package com.geji.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;//分页返回结果对象 Data NoArgsConstructor AllArgsConstructor public class PageB…

5G——物理层仿真

1.前置条件 2.仿真流程 1.填写搜索过程 解&#xff1a; 2.填写每一步细节 2.2.1 准备 解&#xff1a; &#xff08;1&#xff09;BCH &#xff08;2&#xff09;BCCH 解析&#xff1a;因为PBCH是物理广播信道&#xff0c;BCCH是用于广播系统控制信息的下行信道&#…

NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!

NoSQL 数据库管理工具&#xff0c;搭载强大支持&#xff1a;Redis、Memcached、SSDB、LevelDB、RocksDB&#xff0c;为您的数据存储提供无与伦比的灵活性与性能&#xff01; 【官网地址】&#xff1a;http://www.redisant.cn/nosql 介绍 直观的用户界面 从单一应用程序中同…

【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

文章目录 前言一、SPI 程序层次1.1 硬件原理图1.2 硬件框图1.3 软件层次 二、SPI协议2.1 硬件连线2.2 如何访问SPI设备2.3 SPI 框图 总结 前言 随着嵌入式系统的迅猛发展&#xff0c;STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中&#xff0c;串行外设接口&…

我是如何从功能测试成功转岗测试开发的?记录下我的面试经验

由于这段时间我面试了很多家公司&#xff0c;也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助&#xff0c;也希望能帮助到正在找工作的你。 一 找工作 壹&#xff0f; 我们总是草率地进入一个自己不了解…
推荐文章