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


/*** 构造单链表节点*/
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.hqwc.cn/news/474728.html

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

相关文章

【js】JavaScript基础(一)

1、js执行-轮转时间片 2、浏览器组成shell内核部分 主流浏览器 内核IE tridentChrome webkit/blinkfirefox GeckoOpera prestoSafari webkit 不同浏览器使用不同的ja…

(九)【Jmeter】线程(Threads(Users))之bzm-Free-Form Arrivals Thread Group

简述 操作路径如下: 作用:支持自由形式的用户到达模式,具有更高的灵活性,与Arrivals Thread Group类似,不过是通过设置起始值、终止值和持续时间来达到压测目的。配置:通过图形界面或脚本定义用户到达曲线。使用场景:模拟复杂的用户到达模式,满足特定业务需求。优点:…

计算机网络知识-笔记

计算机网络知识总结 目录 应用层 HTTP 协议 概况HTTP 请求报文HTTP 响应报文首部行HTTP/1.1 协议缺点 HTTP/2 协议 二进制协议多路复用数据流头信息压缩服务器推送HTTP/2 协议缺点HTTP/3 协议 HTTPS 协议 HTTP 存在的问题HTTPS 简介TLS 握手过程实现原理 DNS 协议 概况域名的…

Day20 -- learning english

一、积累 1.gulp 2.clog 3.artery 4.bloat 5.kidnap 6.groom 7.prey 8.cargo 9. jerk 10.treadmill 11.shatter 12. acrobatic 13. aggravate 14.moldy 15.curl 16.manual 17.slay 18.sibling 19.hatch 20.dense 二、练习 1.牛津原译 Gulp /ɡʌlp 1.~ sth (down)to swallow …

AIGC实战——能量模型(Energy-Based Model)

AIGC实战——能量模型 0. 前言1. 能量模型1.1 模型原理1.2 MNIST 数据集1.3 能量函数 2. 使用 Langevin 动力学进行采样2.1 随机梯度 Langevin 动力学2.2 实现 Langevin 采样函数 3. 利用对比散度训练小结系列链接 0. 前言 能量模型 (Energy-based Model, EBM) 是一类常见的生…

抖音小店怎么选品?选品思维分享,上架产品自带销量

大家好&#xff0c;我是电商花花。 这两天就要开始开工工作了&#xff0c;对于我们做抖音小店来说&#xff0c;想要做好抖音小店&#xff0c;想要有销量&#xff0c;选品是一定要学会的。 今天给大家讲一下我们想要做抖音小店的朋友该怎么做抖音小店无货源&#xff0c;怎么选…

【Linux】进程的初步认识(一)

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程&#xff0c;首先我们要知道两点 我们可以同时启动多个程序&#xff0c;也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

【多线程】线程的概念与创建

多线程 1. 认识线程&#xff08;Thread&#xff09;线程是什么为啥要有线程进程和线程的区别Java 的线程 和 操作系统线程 的关系 2.第⼀个多线程程序3.创建线程⽅法1 继承 Thread 类⽅法2 实现 Runnable 接⼝方法3 匿名内部类创建 Thread ⼦类对象方法4 匿名内部类创建 Runnab…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确&#xff0c;关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

桌面文件删除了怎么恢复?恢复文件,3个小秘诀!

在日常使用电脑的过程中&#xff0c;很多用户会习惯性的将文件保存在电脑桌面上。因此不可避免会出现桌面文件丢失的情况。这或许会对我们的工作和学习造成影响。 桌面文件删除了怎么恢复&#xff1f;如果你还没有掌握正确的恢复方法。记得继续往下看&#xff0c;下文有实用的…

linux 09 软件安装,YUM

下载软件时候&#xff0c;windows会从网上下载exe文件。 windows中的exe文件linux中的rpm文件 简介部分&#xff1a; 其中的认识RPM包&#xff1a; 管理RPM包&#xff1a; 其中的YUM&#xff1a; YUM&#xff08;软件包管理工具&#xff09; 01.YUM工具简介 02.使用YUM 第…

报表生成器FastReport .Net用户指南:报表中的总计

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…