当前位置: 首页 > news >正文

2025年- H97-Lc205--23.合并k个升序链表(链表、小根堆、优先队列)--Java版

1.题目描述

在这里插入图片描述

2.思路

2个链表的合并
分别使用两个指针,指向2个链表的头结点,每次取出值较小的节点,并把对应的指针后移,直到2个链表便利完成。

4个链表的合并
初始4个指针都指向每个链表头结点,每次遍历这4个节点,找到最小的那个节点加入到结果,然后对应指针后移。

如果有n个链表,每次遍历k个节点,时间复杂度就是O(nk),k个节点的优化就是采用小根堆。用小根堆存储k个节点,每次弹出堆顶元素,下一个节点加入堆中,加入的时间复杂度是O(logK)
所以此时的时间复杂度是O(nlogk)

(1)自定义比较函数
(2)把每个链表的头结点加入堆中
(3)定义虚拟头结点,当前指针指向头结点
(4)当堆不空的时候,弹出堆顶元素。同时把节点插入到当起啊指针的下一个节点,当前指针后移
(5)如果当前节点存在下一个节点,把它插入到堆中
(6)返回头结点
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

3.代码实现

/*** 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) {//1.定义小根堆,按照节点升序排序。PriorityQueue<ListNode> heap=new PriorityQueue<>((a,b)->a.val-b.val);//2.把每个链表的头结点加入到堆中for(ListNode node :lists){if(node!= null){heap.offer(node);}}//3.定义虚拟头结点ListNode dummyhead=new ListNode(0);ListNode cur=dummyhead;//4.当堆不空的时候,弹出堆顶最小结点,加入结果链表while(!heap.isEmpty()){ListNode node=heap.poll();//弹出最小哦结点cur.next=node;//加入结果链表;//移动当前指针cur=cur.next;//如果结点还有下一个节点,把它加入堆if(node.next!=null){heap.offer(node.next);}}//6.返回合并后的头结点的下一个节点,虚拟头结点是0return dummyhead.next;}
}
http://www.lryc.cn/news/623868.html

相关文章:

  • 【撸靶笔记】第二关:GET -Error based -Intiger based
  • 【102页PPT】新一代数字化转型信息化总体规划方案(附下载方式)
  • 2.4 双向链表
  • 牛客周赛 Round 104(小红的矩阵不动点/小红的不动点权值)
  • 03高级语言逻辑结构到汇编语言之逻辑结构转换if (...) {...} else if {...} else {...}
  • react 错误边界
  • git stash临时保存工作区
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • 【牛客刷题】成绩统计与发短信问题详解
  • 【Git系列】如何从 Git 中删除 .idea 目录
  • 【线程安全(二) Java EE】
  • 寻找数组的中心索引
  • 如果用ApiFox调用Kubernetes API,需要怎么设置证书?
  • Day16 多任务(2)
  • USB-A 3.2 和 USB-A 2.0的区别
  • Day27 装饰器
  • 从零配置YOLOv8环境:RTX 3060显卡完整指南
  • AI评测的科学之道:当Benchmark遇上统计学
  • 48.Seata认识、部署TC服务、微服务集成
  • [Responsive theme color] 动态更新 | CSS变量+JS操控 | 移动端-汉堡菜单 | 实现平滑滚动
  • 实现用户输入打断大模型流式输出:基于Vue与FastAPI的方案
  • GaussDB 数据库架构师修炼(十三)安全管理(5)-全密态数据库
  • 【每日一题】Day 6
  • 凸函数与损失函数
  • 开源数据发现平台:Amundsen Search Service 搜索服务
  • Python注解
  • 零墨云A4mini打印机设置电脑通过局域网络进行打印
  • C#对象的本地保存与序列化详解笔记
  • GitLab CI/CD、Jenkins与GitHub Actions在Kubernetes环境中的方案对比分析
  • 【Golang】:错误处理