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

【CT】LeetCode手撕—23. 合并 K 个升序链表

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐23. 合并 K 个升序链表——题解思路
  • 3- ACM 实现

题目

  • 原题连接:23. 合并 K 个升序链表

1- 思路

  • 模式识别:合并 K 个链表 ——> 优先队列

思路

  • 借助优先队列,每次从 k 个链表中,各取一个元素,添加到优先队列中。
  • 保证优先队列中 只有 k 个元素

2- 实现

⭐23. 合并 K 个升序链表——题解思路

在这里插入图片描述

class Solution {public ListNode mergeKLists(ListNode[] lists) {int len = lists.length;if(len == 0){return null;}PriorityQueue<ListNode> pq = new PriorityQueue<>(len, Comparator.comparingInt(a -> a.val));ListNode dummyHead = new ListNode(-1);ListNode curNode = dummyHead;for(ListNode list : lists){// 将每个 list 的头结点加入if(list!=null){pq.add(list);}}// 处理链表排序逻辑while(!pq.isEmpty()){ListNode node = pq.poll();curNode.next = node;curNode = curNode.next;if(curNode.next!=null){pq.add(curNode.next);}}return dummyHead.next;}
}

3- ACM 实现

public class mergeK {static class ListNode{int val;ListNode next;ListNode(){}ListNode(int x){val =x;}}public static ListNode mergeK(ListNode[] lists){int len = lists.length;if(len==0){return null;}// 1. 数据结构PriorityQueue<ListNode> pq = new PriorityQueue<>(len, Comparator.comparingInt(a -> a.val));ListNode dummyHead = new ListNode(-1);ListNode cur = dummyHead;// 2. 头入队for(ListNode list:lists){if(list!=null){pq.add(list);}}//3.排序逻辑while(!pq.isEmpty()){ListNode node = pq.poll();cur.next = node;cur = cur.next;if(cur.next!=null){pq.add(cur.next);}}return dummyHead.next;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入链表的个数 k ");int k = sc.nextInt();ListNode[] lists = new ListNode[k];for(int i = 0 ; i < k ; i++){ListNode dummyHead = new ListNode(0);ListNode cur = dummyHead;System.out.println("输入第"+(i+1)+"个链表的元素个数");int n  = sc.nextInt();System.out.println("输入元素");for(int j = 0 ; j < n ;j++){cur.next = new ListNode(sc.nextInt());cur = cur.next;}lists[i] = dummyHead.next;}ListNode forRes = mergeK(lists);while(forRes!=null){System.out.print(forRes.val + " ");forRes = forRes.next;}}
}

相关文章:

  • 吴恩达机器学习 第三课 week1 无监督学习算法(上)
  • 【stm32单片机应用】基于I2C协议的OLED显示(利用U82G库)
  • 操作系统 大作业
  • 大模型 Scaling Law 的本质是工业化思维,Token 工厂,Token 生意
  • 微服务为什么使用RPC而不使用HTTP通信
  • 中年帕金森:守护健康,从容面对生活挑战
  • brew 安装多个版本的php
  • Redis学习|Redis主从复制、Redis哨兵模式、缓存穿透、缓存击穿、缓存雪崩概念和相应解决方法
  • SQL Server几种琐
  • SwiftUI 6.0(iOS/iPadOS 18)中全新的 Tab 以及 Sidebar+悬浮 TabView 样式
  • 数据分析第三讲:numpy的应用入门(二)
  • 【LLM之RAG】RAT论文阅读笔记
  • C++ 矩阵乘法
  • Linux 6.10也引进了蓝屏机制
  • LeetCode热题3.无重复的最长字串
  • ES6指北【2】—— 箭头函数
  • [译]Python中的类属性与实例属性的区别
  • CentOS从零开始部署Nodejs项目
  • Java Agent 学习笔记
  • Java超时控制的实现
  • Lsb图片隐写
  • PHP CLI应用的调试原理
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vim Clutch | 面向脚踏板编程……
  • windows下使用nginx调试简介
  • 安卓应用性能调试和优化经验分享
  • 复杂数据处理
  • linux 淘宝开源监控工具tsar
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # 飞书APP集成平台-数字化落地
  • ## 1.3.Git命令
  • #《AI中文版》V3 第 1 章 概述
  • #NOIP 2014# day.2 T2 寻找道路
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (poj1.2.1)1970(筛选法模拟)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (力扣题库)跳跃游戏II(c++)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .sh 的运行
  • /boot 内存空间不够
  • /tmp目录下出现system-private文件夹解决方法
  • [ linux ] linux 命令英文全称及解释
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [Angular 基础] - 数据绑定(databinding)
  • [APIO2012] 派遣 dispatching