news 2026/4/23 17:51:39

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/23 13:12:19

Windows虚拟显示器终极指南:5分钟学会添加多个虚拟屏幕

Windows虚拟显示器终极指南&#xff1a;5分钟学会添加多个虚拟屏幕 【免费下载链接】Virtual-Display-Driver Add virtual monitors to your windows 10/11 device! Works with VR, OBS, Sunshine, and/or any desktop sharing software. 项目地址: https://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/4/23 11:00:45

如何用Open-AutoGLM 2.0构建高并发AI推理集群?(架构设计+实战案例)

第一章&#xff1a;Open-AutoGLM 2.0 云手机Open-AutoGLM 2.0 云手机是新一代基于云端的人工智能自动化平台&#xff0c;专为移动应用场景设计。该系统融合了大语言模型与自动化控制技术&#xff0c;能够在虚拟安卓环境中实现智能操作、任务调度与数据交互&#xff0c;广泛适用…

作者头像 李华
网站建设 2026/4/23 12:32:58

视频教程制作:帮助新手快速上手机器学习平台

视频教程制作&#xff1a;帮助新手快速上手机器学习平台 在AI技术加速渗透各行各业的今天&#xff0c;越来越多的开发者希望迈入机器学习的大门。但面对五花八门的框架、复杂的工程流程和陡峭的学习曲线&#xff0c;许多初学者往往不知从何下手。是选择学术圈流行的PyTorch&…

作者头像 李华
网站建设 2026/4/22 14:58:17

构建沉浸式3D抽奖体验:log-lottery项目深度解析

在当今数字化活动日益普及的背景下&#xff0c;传统的抽奖方式已难以满足用户对视觉体验和互动性的高要求。log-lottery项目应运而生&#xff0c;它巧妙地将Vue3的响应式特性与Three.js的3D渲染能力相结合&#xff0c;打造出令人惊艳的动态抽奖解决方案。 【免费下载链接】log-…

作者头像 李华
网站建设 2026/4/23 12:31:30

PDF电子书赠送:换取用户邮箱地址建立私域流量

TensorFlow实战指南&#xff1a;用技术内容撬动私域增长 在AI开发者社区里&#xff0c;一个50页的PDF文档能值多少钱&#xff1f;某初创团队曾做过一次实验&#xff1a;他们将一份《TensorFlow企业级部署实践》电子书放在官网首页&#xff0c;仅通过“邮箱换下载”的方式&#…

作者头像 李华