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

力扣 hot100 Day40

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

//自己写的垃圾
class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {vector<int> record;int n = lists.size();for(int i=0;i<n;i++){while(lists[i]){record.push_back(lists[i]->val);lists[i]=lists[i]->next;}}if (record.empty()) {return nullptr;}sort(record.begin(),record.end());ListNode* res = new ListNode(record[0]);ListNode* cur = res;int len = record.size();for(int i=1;i<len;i++){cur->next = new ListNode(record[i]);cur = cur->next;}return res;}
};

没有思考纯粹取巧,放数组里排序后生成新的链表,回去等通知版

//抄的
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode dummy(0);ListNode* tail = &dummy;while (l1 && l2) {if (l1->val < l2->val) {tail->next = l1;l1 = l1->next;} else {tail->next = l2;l2 = l2->next;}tail = tail->next;}tail->next = l1 ? l1 : l2;return dummy.next;}ListNode* mergeKLists(vector<ListNode*>& lists) {if (lists.empty()) return nullptr;int k = lists.size();while (k > 1) {for (int i = 0; i < k / 2; ++i) {lists[i] = mergeTwoLists(lists[i], lists[k - 1 - i]);}k = (k + 1) / 2;}return lists[0];}
};

面试该写的算法,分治归并算法

逻辑说起来也很简单,两两合并的意思,为了方便循环,一头一尾开始合并,然后逐次减半k值。

比较需要注意的就是k减半的计算,举例子算算就好了

每层的时间复杂度都是 O(N),共有 log₂K 层。​​总时间复杂度 = O(N log K)​​。

http://www.xdnf.cn/news/15052.html

相关文章:

  • Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享中的应用(341)
  • AI翻唱——So-VITS-SVC
  • mvn能只test单独一个文件吗
  • 攻防世界——web题catcat-new session值伪造
  • 电脑息屏工具,一键黑屏超方便
  • 【LeetCode100】--- 1.两数之和【复习回滚】
  • 学习日记-spring-day45-7.10
  • 深入理解 Linux 中的 stat 函数与文件属性操作
  • 710 Mybatis实战
  • Using Spring for Apache Pulsar:Transactions
  • PyTorch Tensor 操作入门:转换、运算、维度变换
  • 【TCP/IP】11. IP 组播
  • 深入解析JVM内存结构与垃圾回收机制
  • Boost.Asio学习(3):异步读写
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • Linux的DNS域名解析服务
  • 多线程 JAVA
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • 2025.07.09华为机考真题解析-第二题200分
  • FlashAttention 快速安装指南(避免长时间编译)
  • LeetCode经典题解:49、字母异位词分组
  • 西部数据WD授权代理商-深圳同袍存储科技有限公司
  • 5种使用USB数据线将文件从安卓设备传输到电脑的方法
  • Sophix、Tinker 和 Robust 三大主流 Android 热修复框架的详细对比
  • C语言顺序表:从零开始,解锁数据结构之门!
  • 无人机三叶螺旋桨概述
  • git fetch的使用
  • OpenSearch 视频 RAG 实践
  • 【libm】 18 泛型绝对值函数 fabs(fabs.rs)