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

LeetCode:23. 合并 K 个升序链表

23. 合并 K 个升序链表

  • 1)题目
  • 2)过程
  • 3)代码
    • 1. 最开始
    • 2.初步优化
  • 4)结果
    • 1. 最开始
    • 2. 初步优化

1)题目

给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。

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

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2)过程

先摸清 [[1,2,3],[4,5,6]] 的合并规律,start.val < lists[i].val
再摸清 [[4,5,6],[1,2,3]] 的合并规律,start.val > lists[i].val
最后摸清 [[-2],[-3,-2,1]] 的合并规律,start.val = lists[i].val

3)代码

1. 最开始

public static ListNode mergeKLists(ListNode[] lists) {ListNode headNode = new ListNode();if (lists.length == 0) return null;if (lists.length == 1) return lists[0];ListNode listNode;for (int i = 0; i < lists.length; i++) {listNode = headNode;if (listNode.next == null) {listNode.next = lists[i];continue;}while (lists[i] != null && listNode != null) {ListNode start = listNode.next;if (start == null) {listNode.next = lists[i];break;}if (start.val < lists[i].val) {// s后移一位listNode = start;} else {ListNode node = new ListNode(lists[i].val);//l移动到s前一位listNode.next = node;node.next = start;//h移动到node位置listNode = listNode.next;//l后移一位lists[i] = lists[i].next;}}}return headNode.next;
}

2.初步优化

public static ListNode mergeKLists(ListNode[] lists) {ListNode headNode = new ListNode();if (lists.length == 0) return null;if (lists.length == 1) return lists[0];ListNode listNode;for (int i = 0; i < lists.length; i++) {listNode = headNode;if (listNode.next == null) {listNode.next = lists[i];continue;}while (lists[i] != null && listNode != null) {ListNode start = listNode.next;if (start == null) {listNode.next = lists[i];break;}if (!(start.val < lists[i].val)) {ListNode node = new ListNode(lists[i].val);//l移动到s前一位listNode.next = node;node.next = start;//l后移一位lists[i] = lists[i].next;}listNode = listNode.next;}}return headNode.next;
}

4)结果

1. 最开始

在这里插入图片描述

2. 初步优化

在这里插入图片描述

http://www.lryc.cn/news/68608.html

相关文章:

  • js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search
  • 分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因
  • 高性能ADC/DAC FMC子卡推出-FMC164
  • Agisoft Metashape 红外影像处理
  • Mybatis从入门到入土
  • 修为 - 人生感悟
  • UnityWebSocket | 双端通信支持Text/Binary
  • lazada详情
  • 企业为什么要数字化转型?
  • Excel 设置只能输入指定的字符
  • Web开发介绍
  • 多语言APP的外包开发流程及注意事项
  • CMAKE介绍和使用(Windows平台)
  • 宝塔面板webhook 使用教程
  • 大模型时代入场级技能:提示词工程!中文教程来啦
  • template和component自定义组件之间的区别
  • 如何提高读取Excel的效率,NPOI多线程读取详解
  • 【算法】【算法杂谈】从1到n的自然数组中,1出现的次数如何计算?
  • 日常笔记-Flutter build命令参数
  • 【利用AI让知识体系化】入门Koa框架
  • 边缘计算:数据采集、清洗与处理的新时代
  • 分区计量管理项目应用
  • LayoutInflater中inflate()参数解析
  • 星河案例ㅣ中国电信 X 冲量在线:基于智算中心的隐私计算应用实践
  • 开发笔记之:JAVA读取QT QDataStream输出
  • Docker入门实战---修改Docker镜像源
  • Java构建高并发高可用的电商平台(静态架构蓝图之剖析架构)
  • SpringBoot核心运行原理解析之------@Conditional条件注解
  • systemverilog 001 内建数据类型logic
  • Flink Kafka-Source