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

力扣——23合并升序链表

目录

1:题目描述:

2.算法思想:

3.代码展示:

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

2.算法思想:

  1. 义比较器​​:

    • 由于priority_queue默认是大根堆(堆顶元素最大),而我们希望每次取出最小的元素
    • 自定义比较器Compare,当l1->val > l2->val时返回true,这样构造出小根堆
  2. ​初始化优先级队列​​:

    • 创建一个存储ListNode*的小根堆pq
  3. ​将所有链表元素入队​​:

    • 遍历输入的lists数组
    • 对于每个链表,从头节点开始,将所有节点依次加入优先级队列
    • 注意:这里直接将原链表的节点拆散加入队列,会破坏原链表结构
  4. ​构建结果链表​​:

    • 创建一个虚拟头节点dummy简化操作
    • 使用指针p跟踪当前链表的末尾
    • 循环从优先级队列中取出最小元素(堆顶):
      • 将取出的节点连接到p->next
      • p移动到新连接的节点
      • 从队列中移除该节点
  5. ​返回结果​​:

    • 返回dummy.next,即合并后的链表头节点

3.代码展示:

 //因为priority_queue默认是大根堆,堆顶是最大的元素,所以我们需要自定比较器,让它从小到大class Compare {public:bool operator()(ListNode* l1, ListNode* l2) {return l1->val > l2->val;}
};ListNode* mergeKLists(vector<ListNode*>& lists) {//使用优先级队列,priority_queue<ListNode*, vector<ListNode*>, Compare>pq;//把lists的每个元素都入队for (int i = 0; i < lists.size(); i++) {while (lists[i]){pq.push(lists[i]);lists[i] = lists[i]->next;}}//重新定义一个链表ListNode dummy(-1);ListNode* p = &dummy;//始终指向最后一个元素,开始链表为空,故指向头节点//接下来开始循环pq,while (!pq.empty()){p->next = pq.top();pq.pop();p = p -> next;}return dummy.next;}

23. 合并 K 个升序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-k-sorted-lists/

相关文章:

  • 使用listPersonalCertificates 命令列示WebSphere Application Server特定密钥库中的个人证书
  • 【Machine Learning Q and AI 读书笔记】- 03 小样本学习
  • “Everything“工具 是 Windows 上文件名搜索引擎神奇
  • xml 和 yaml 的区别
  • 关系型数据库设计指南
  • HOOK上瘾思维模型——AI与思维模型【88】
  • 【Linux系统】Linux进程信号(产生,保存信号)
  • 使用 Spring Boot Actuator 实现应用实时监控
  • 《TCP/IP详解 卷1:协议》之第九章:IP选路
  • 项目管理进阶:详解华为研发项目管理(IPD流程管理)【附全文阅读】
  • 机器视觉开发-打开摄像头
  • Selenium:模拟真实用户的爬虫
  • Python与深度学习:自动驾驶中的物体检测,如何让汽车“看懂”世界
  • 前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现
  • Arduino程序函数详解与实际案例
  • Qt二维码demo
  • vscode 的空格和 tab 设置 与 Rime 自建词库
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)
  • react学习笔记2——基于React脚手架与ajax
  • 数据可视化入门:画一只会动的星空折线图
  • 《一鸣惊人》五一特别节目:以戏曲为桥梁,展现劳动者的坚守
  • 沈晓萍︱严金清:比斯坦因更早获得敦煌文物的无锡名士
  • 深交所修订创业板指数编制方案,引入ESG负面剔除机制
  • 共绘“彩色上海”,IP SH艺术共创沙龙首期圆满举办
  • 孙磊已任中国常驻联合国副代表、特命全权大使
  • 中使馆:奉劝菲方有关人士不要在台湾问题上挑衅,玩火者必自焚