news 2026/9/20 8:10:09

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/9/17 16:48:08

3分钟搞定MobileNetV2部署:从零到推理的极速指南

3分钟搞定MobileNetV2部署&#xff1a;从零到推理的极速指南 【免费下载链接】models A collection of pre-trained, state-of-the-art models in the ONNX format 项目地址: https://gitcode.com/gh_mirrors/model/models 还在为深度学习模型部署头疼&#xff1f;Mobi…

作者头像 李华
网站建设 2026/9/18 0:04:10

Open-AutoGLM 为何被视为AutoGLM终极形态:对比5种主流框架的压倒性优势

第一章&#xff1a;Open-AutoGLM 技术原理Open-AutoGLM 是一个基于自回归语言建模与图神经网络融合的开源框架&#xff0c;旨在实现复杂任务的自动化推理与生成。其核心技术结合了大语言模型&#xff08;LLM&#xff09;的语义理解能力与图结构数据的拓扑表达优势&#xff0c;通…

作者头像 李华
网站建设 2026/9/13 23:18:45

中国情绪图片库:如何快速获取专业的情绪研究素材?

中国情绪图片库&#xff1a;如何快速获取专业的情绪研究素材&#xff1f; 【免费下载链接】中国情绪图片库下载 “中国情绪图片库.rar”是一个精心挑选的图片集合&#xff0c;旨在通过视觉刺激来引发特定的情绪反应。这些图片经过严格筛选&#xff0c;确保其能够有效地激发观察…

作者头像 李华
网站建设 2026/9/17 8:14:38

【紧急通知】Open-AutoGLM启动配置存在高危漏洞?最新安全启动规范发布

第一章&#xff1a;Open-AutoGLM启动配置漏洞事件概述近期&#xff0c;开源项目 Open-AutoGLM 被曝出存在严重的启动配置漏洞&#xff0c;该问题可能导致未授权用户在默认配置下远程执行任意代码。此漏洞源于服务启动时未正确校验配置文件的权限设置&#xff0c;且默认开启了调…

作者头像 李华
网站建设 2026/9/19 5:39:59

SeedVR2视频修复终极指南:3分钟快速实现视频超清化

SeedVR2视频修复终极指南&#xff1a;3分钟快速实现视频超清化 【免费下载链接】SeedVR2-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR2-7B 还在为AI生成的视频模糊不清而烦恼吗&#xff1f;&#x1f914; 字节跳动开源的SeedVR2模型为你提供…

作者头像 李华
网站建设 2026/9/15 23:45:56

蓝绿部署实践:零停机更新TensorFlow推理服务

蓝绿部署实践&#xff1a;零停机更新TensorFlow推理服务 在推荐系统、智能客服或金融风控这类对稳定性要求极高的场景中&#xff0c;一次模型上线导致的服务抖动可能直接引发用户投诉甚至业务损失。而现实却是——模型需要频繁迭代&#xff0c;数据分布持续漂移&#xff0c;算法…

作者头像 李华