news 2026/4/18 9:40:44

12.26 - 合并K个升序链表 面向对象3大特性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12.26 - 合并K个升序链表 面向对象3大特性

目录

1.合并K个升序链表

a.核心思想

b.思路

c.步骤

2.面向对象3大特性


1.合并K个升序链表

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

/** * 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: // 定义比较函数,用于最小堆 struct Compare { bool operator()(const ListNode* a, const ListNode* b) { return a->val > b->val; } }; ListNode* mergeKLists(vector<ListNode*>& lists) { // 定义最小堆 std::priority_queue<ListNode*, std::vector<ListNode*>, Compare> minHeap; // 将所有链表的头节点放入堆中 for (ListNode* list : lists) { if (list != nullptr) minHeap.push(list); } // 创建哑节点 ListNode* dummy = new ListNode(); ListNode* current = dummy; // 当堆不为空时,进行合并操作 while (!minHeap.empty()) { ListNode* node = minHeap.top(); minHeap.pop(); current->next = node; current = current->next; // 如果取出的节点有下一个节点,将下一个节点放入堆中 if (node->next != nullptr) minHeap.push(node->next); } // 返回合并后的链表的头节点 return dummy->next; } };

a.核心思想

利用最小堆(优先队列)来高效地依次获取多个升序链表中的最小元素,从而合并成一个升序链表。

b.思路

① 将所有链表的头节点放入最小堆中,堆按照节点的值进行排序。

② 每次从堆中取出值最小的节点,将其添加到合并后的链表中。

③ 如果取出的节点有下一个节点,将下一个节点放入堆中。

④ 重复上述步骤直到堆为空。

c.步骤

① 定义一个最小堆,用于存储链表节点,并根据节点值进行排序。

② 遍历所有链表,将每个链表的头节点放入堆中。

③ 创建一个哑节点作为合并后链表的头节点的前驱,方便操作。

④ 当堆不为空时,取出堆顶节点,将其连接到合并后的链表上。

⑤ 如果取出的节点有下一个节点,将下一个节点放入堆中。

⑥ 最后返回哑节点的下一个节点作为合并后的链表的头节点。

2.面向对象3大特性

封装

继承

多态

概念

将数据(属性)和操作数据的方法(行为)捆绑在一起,形成一个独立的单元(即类),并尽可能隐藏对象的内部实现细节,仅通过对外提供的方法来与外界交互

允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以复用父类的代码,同时还可以添加自己特有的属性和方法,或者重写父类的方法以实现不同的功能

指同一个方法调用可以根据对象的不同类型而表现出不同的行为。不同的对象对同一消息做出响应,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果

作用

提高代码的安全性和可维护性。比如,将一个银行账户类中的余额属性设置为私有,只能通过特定的存款和取款方法进行修改,这样可以防止外部直接修改余额导致数据不合理

实现代码的复用和扩展。例如,定义一个动物类作为父类,有“呼吸”等方法,然后定义狗、猫等子类继承自动物类,狗类可以添加“看门”方法,猫类可以添加“抓老鼠”方法,同时都继承了“呼吸”方法

提高代码的灵活性和可扩展性。比如,定义一个图形类,有计算面积的方法,圆形、矩形等子类继承图形类并重写计算面积的方法,当使用图形类的引用调用计算面积方法时,根据实际对象是圆形还是矩形,会执行相应子类中的计算方法

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:42:06

Open-AutoGLM 2.0云手机性能提升300%的秘密:GPU虚拟化优化全揭秘

第一章&#xff1a;Open-AutoGLM 2.0云手机性能跃迁全景解读Open-AutoGLM 2.0作为新一代云手机智能引擎&#xff0c;在计算架构与资源调度层面实现了根本性突破。其核心通过异构计算融合技术&#xff0c;将云端GPU、NPU与CPU资源动态协同&#xff0c;显著提升自然语言理解与图形…

作者头像 李华
网站建设 2026/4/18 3:36:02

基于L298N的直流电机驱动Arduino入门必看教程

从零开始玩转L298N&#xff1a;Arduino驱动直流电机的实战指南你有没有试过用Arduino直接控制一个直流电机&#xff1f;结果发现——电机纹丝不动&#xff0c;甚至单片机还莫名其妙重启了&#xff1f;别急&#xff0c;这不是你的代码写错了&#xff0c;而是你忽略了一个关键事实…

作者头像 李华
网站建设 2026/4/18 3:36:35

Vortex模组管理器终极实战:从小白到大神的完整进阶指南

想要轻松管理海量游戏模组&#xff1f;Vortex模组管理器绝对是你的不二选择&#xff01;作为Nexus Mods官方推出的现代化工具&#xff0c;它让模组安装变得像拖拽文件一样简单。无论你是刚接触模组的新手&#xff0c;还是经验丰富的老玩家&#xff0c;这份指南都将带你从零开始…

作者头像 李华
网站建设 2026/4/18 3:38:33

这个系统的人工智能特色体现开题报告

五邑大学毕业设计&#xff08;论文&#xff09;开题报告(适用于理、工科类专业)题 目&#xff1a;学院&#xff08;部&#xff09; 专 业 学 号 学生姓名 指导教师 …

作者头像 李华
网站建设 2026/4/18 3:36:13

招聘网信息大数据分析可视化系统开题报告

文山学院本科生毕业论文&#xff08;设计&#xff09;开题报告姓名性别学号学院专业年级2020级论文题目□教师推荐题目 £自拟题目题目来源社会实践题目类别应用研究指导教师汪继林选题的目的、意义(理论意义、现实意义):选题目的主要是构建一个招聘网信息大数据分析可视化…

作者头像 李华