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

23. 合并 K 个升序链表

题目描述

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

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

示例 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

解答

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:// 分治合并的方法// 若有k个链表,第一轮两两合并,得到 k/2 个链表 // 第二轮再两两合并,得 k / 4个链表,依此类推,剩余一个链表然后再自底向上合并ListNode* mergeKLists(vector<ListNode*>& lists) {return merge(lists, 0, lists.size() - 1);}ListNode* mergeKLists1(vector<ListNode*>& lists) {// 顺序合并ListNode *ans = nullptr; // 初始和一个空链表合并,便于操作for(size_t i = 0; i < lists.size(); ++i){ans = mergeTwoLists(ans, lists[i]);}return ans;}private:// 将 lists中下标从[l, r]的链表进行合并ListNode *merge(vector<ListNode*>& lists, int l, int r){if(l == r) return lists[l];if(l > r) return nullptr;int mid = (l + r) >> 1; // 拆分成两部分进行合并return mergeTwoLists(merge(lists, l, mid), merge(lists, mid + 1, r));}// 两个链表进行归并排序ListNode* mergeTwoLists(ListNode *a, ListNode *b){if((!a) || (!b)) return a ? a : b;ListNode head, *tail = &head, *aptr = a, *bptr = b;// 归并,尾插入列表while(aptr && bptr){if(aptr->val < bptr->val){tail->next = aptr;aptr = aptr->next;}else {tail->next = bptr;bptr = bptr->next;}tail = tail->next;}// 处理还有节点的链表,添加到结尾tail->next = aptr ? aptr : bptr;return head.next;}};
http://www.lryc.cn/news/96279.html

相关文章:

  • Nexus3部署、配置+SpringBoot项目Demo
  • linux下用docker安装mysql
  • Vue - 可视化用户角色、菜单权限、按钮权限配置(动态获取菜单路由)
  • hive库操作示例
  • LeetCode第 N 个泰波那契数 (认识动态规划)
  • 线程安全问题(内存可见性)
  • STM32MX配置EEPROM(AT24C02)------保姆级教程
  • 微信小程序 样式和全局配置
  • 一.初识C语言
  • filebeat到kafka示例
  • AlmaLinux系统下的Zabbix汉化
  • 【网络编程】(TCP流套接字编程 ServerSocket API Socket API 手写TCP版本的回显服务器 TCP中的长短连接)
  • 企业级PaaS低代码快开平台源码,基于 Salesforce Platform 的开源替代方案
  • 【LeetCode】72.编辑距离
  • 大模型,开源干不掉闭源
  • Redis 九种数据类型的基本操作
  • 爬取微博热搜榜并进行数据分析
  • 基于深度神经网络的肺炎检测系统实现
  • C# LINQ和Lambda表达式对照
  • 二、SQL-6.DCL-1).用户管理
  • ElasticSearch学习--数据聚合
  • PostMan+Jmeter工具介绍及安装
  • AutoSAR系列讲解(实践篇)7.4-实验:配置SWCRTE
  • 腾讯云内存型CVM服务器MA3、M6、M6ce和M5处理器CPU说明
  • 集睿致远推出CS5466多功能拓展坞方案:支持DP1.4、HDMI2.1视频8K输出
  • SQL中为何时常见到 where 1=1?
  • React AntDesign表批量操作时的selectedRowKeys回显选中
  • anydesk远程控制,主动连接。
  • Spring Data Redis操作Redis
  • sqlite触发器1