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

力扣 LCR 078 合并K个升序链表

思路 + 解题过程

分治合并

LeetCode 21题 合并两个有序链表 相似 只是在此题的基础上增加了链表的数量。
使用递归将链表数组不断分成两半,直到分成的小组都只剩下一个链表元素为止,随后开始合并链表。

复杂度

  • 时间复杂度: O(N * logK) K 为 链表(lists) 的个数,n 为所有链表的节点数之和。
  • 空间复杂度: O(logK) 递归的深度为 logK

    代码实现

    class Solution {public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0)return null;return merge(lists, 0, lists.length - 1);}public ListNode merge(ListNode[] lists, int start, int end) {if (start == end)return lists[start];int mid = (start + end) >>> 1;ListNode pa = merge(lists, start, mid);ListNode pb = merge(lists, mid + 1, end);return mergeSort(pa, pb);}public ListNode mergeSort(ListNode pa, ListNode pb) {ListNode target = new ListNode(0);ListNode temp = target;while(pa != null && pb != null){if(pa.val < pb.val){temp.next = pa;pa = pa.next;}else{temp.next = pb;pb = pb.next;}temp = temp.next;}temp.next = pa != null ? pa : pb; return target.next;}
    }
    

            也可以通过for循环遍历的方式依次合并链表,不过时间复杂度会有所提升。

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

    相关文章:

  • 【hive】记一次hiveserver内存溢出排查,线程池未正确关闭导致
  • React Native 开发 安卓项目构建工具Gradle的配置和使用
  • IntelliJ IDEA新版本的底部version control(或git)里local change窗口显示配置修改详细教程
  • MySQL三大日志——binlog、redoLog、undoLog详解
  • MCU应用踩坑笔记(ADC 中断 / 查询法)
  • 32.日常算法
  • 通过docker安装部署deepseek以及python实现
  • 批量提取word表格数据到一个excel
  • 使用 Axios 获取用户数据并渲染——个人信息设置
  • DeepSeek在FPGA/IC开发中的创新应用与未来潜力
  • 【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
  • 【DeepSeek-R1训练笔记】随手记录一些训练log
  • 【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具04
  • 「全网最细 + 实战源码案例」设计模式——策略模式
  • [MoeCTF 2022]baby_file
  • 【AI日记】25.02.07 探索开辟第二战场
  • path 路径模块
  • SpringBoot中的多环境配置管理
  • mac下生成.icns图标
  • 关于JS继承的七种方式和理解
  • 储能系统-系统架构
  • AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型
  • 【截图】selenium自动通过浏览器截取指定元素div的图片
  • 如何导入第三方sdk | 引入第三方jar 包
  • HarmonyOS 5.0应用开发——ContentSlot的使用
  • C#常用集合优缺点对比
  • 基于CLIP视觉语言大模型的行人重识别方法的简单框架设计
  • RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)
  • BurpSuite抓包与HTTP基础
  • SQL Server 数据库迁移到 MySQL 的完整指南