- 博客(56)
- 收藏
- 关注
原创 LeetCode 热题 100——day12 最小覆盖子串
本文解析LeetCode 76题「最小覆盖子串」,通过滑动窗口算法在字符串s中寻找包含t全部字符(含重复次数)的最短子串。核心思路:用双指针维护可变窗口,右指针扩展集齐字符,左指针收缩删除冗余字符。关键点在于使用need和window数组统计字符需求与当前数量,配合count和cnt快速判断覆盖状态。代码实现中需注意重复字符计数、窗口收缩边界及初始值处理。最终时间复杂度O(m+n),空间O(1)。示例演示了窗口动态调整过程,最终输出最短合法子串"BANC"。
2026-08-13 23:54:40
204
2
原创 C语言深度解析——数据类型、变量、运算符与格式化输入输出
C语言数据类型与变量解析 本文深入探讨C语言中的数据类型、变量、运算符及格式化输入输出等核心概念,帮助读者建立扎实的编程基础。 数据类型 C语言数据类型分为内置类型和自定义类型: 字符型:char(1字节),可存储ASCII字符 整型:short(2字节)、int(4字节)、long(4/8字节)、long long(8字节) 浮点型:float(4字节)、double(8字节)、long double(8/16字节) 布尔型:_Bool(C99引入) 变量与sizeof运算符 变量是存储数据的容器,需先声
2026-08-13 22:19:58
531
1
原创 LeetCode 热题 100——day11 滑动窗口最大值
文章摘要 本文探讨了LeetCode 239题“滑动窗口最大值”的三种解法。首先通过单调栈预处理每个元素右侧第一个更大值,实现窗口内快速跳转查找最大值(时间复杂度O(nk));接着采用优先队列维护窗口最大值,利用延迟删除策略(时间复杂度O(n log n));最后提出最优解——单调队列法,仅保留可能成为最大值的候选元素,使时间复杂度降至O(n)。三种方法层层递进,逐步优化空间与时间复杂度,最终实现线性扫描的高效解决方案。代码示例与复杂度分析完整呈现了算法演进过程。
2026-08-12 23:49:06
397
原创 C语言深度解析第一讲:从第一个程序到字符、字符串与转义字符
本文是C语言入门指南,首先演示经典"hello world"程序,引出初学者常见疑问:源文件如何运行?main函数的作用?printf从何而来?随后介绍C语言发展简史,从Unix系统诞生到标准化进程。重点讲解编译器工作原理,解析.c文件经编译链接生成可执行程序的过程,并区分IDE与编译器的概念。通过VS2022创建项目的实例,说明头文件(.h)与源文件(.c)的分工。最后逐行解析首个C程序,涵盖#include指令、main函数结构、printf函数及转义字符等基础语法要点
2026-08-12 19:49:21
536
原创 LeetCode 热题 100——day10 和为 K 的子数组
这篇文章介绍了如何解决LeetCode 560题“和为K的子数组”问题。主要内容包括: 问题描述:统计整数数组中连续子数组和等于k的个数。 方法分析: 基础解法:使用前缀和+双重循环枚举区间,时间复杂度O(n²)。 优化解法:结合前缀和与哈希表,将时间复杂度降至O(n)。通过存储前缀和出现次数,快速查找满足条件的子数组。 关键点: 哈希表记录前缀和及其出现次数。 初始化时设置mp[0]=1,以处理从数组开头开始的子数组。 遍历时先查找sum-k是否存在,再更新当前前缀和。 代码示例:提供了两种实现方式,逐步
2026-08-11 23:50:24
367
1
原创 LeetCode 热题 100——day9找到字符串中所有字母异位词
这篇题解介绍了两种滑动窗口方法解决「找到字符串中所有字母异位词」问题: 方法一:定长滑动窗口 + 双计数数组 维护两个固定大小数组分别统计窗口和模式串p的字符出现次数 窗口长度固定为p的长度,每次滑动比较两个数组是否相等 时间复杂度O(n),空间复杂度O(1) 方法二:滑动窗口 + 剩余字符计数 使用单个数组记录p中各字符的剩余可用次数 右指针移动时消耗字符,当某字符出现次数超额时收缩左边界 当窗口长度等于p长度时即为有效解 时间复杂度O(n),空间复杂度O(1) 两种方法都利用了滑动窗口的特性,通过动态维
2026-08-10 23:39:19
202
原创 LeetCode 热题 100——day8无重复字符的最长子串
本文介绍了三种滑动窗口方法求解「无重复字符的最长子串」问题:1)使用unordered_set维护窗口字符,重复时逐步移动左边界;2)通过数组记录字符上次出现位置,重复时直接跳跃左边界;3)用unordered_map存储字符位置信息。三种方法时间复杂度均为O(n),核心区别在于处理重复字符的方式:方法一逐步收缩,方法二和方法三利用位置记录直接跳跃优化。文章通过代码示例和表格对比,强调理解窗口扩张/收缩机制的重要性,并指出掌握滑动窗口思想对解决字符串和区间问题的关键作用。
2026-08-09 23:44:51
206
原创 LeetCode 热题 100——day7 接雨水
本文介绍了四种解决"接雨水"问题的方法,包括两次扫描法、前后缀最大值法、双指针优化和单调栈法。核心思路是计算每个位置左右两边的最高柱子,取较小值作为水位上限,减去当前高度得到该位置接水量。两次扫描法通过左右两次遍历处理边界情况;前后缀法记录每个位置的左右最大值;双指针优化动态维护两侧最大值;单调栈法利用栈结构处理凹槽。四种方法时间复杂度均为O(n),空间复杂度从O(1)到O(n)不等,提供了不同场景下的最优解思路。
2026-08-08 23:15:06
669
原创 LeetCode 热题 100——day6 三数之和
摘要: 本文以LeetCode「三数之和」为例,探讨了从哈希查找转向排序+双指针的解题思路。最初尝试哈希法时,面临下标处理、重复三元组去重等难题,最终采用排序预处理+双指针策略,通过固定一个数并在剩余区间内调整左右指针寻找目标值。重点分析了去重逻辑(首元素及左右指针去重)和提前终止条件(首元素>0时跳出),实现O(n²)时间复杂度。对比哈希法的繁琐,双指针方案代码更清晰,是处理此类问题的优选方法。 关键词: 三数之和、双指针、哈希查找、去重、排序、算法优化
2026-08-07 23:34:12
279
原创 LeetCode 热题 100——day5 盛最多水的容器
摘要: 本文介绍了LeetCode题目《盛最多水的容器》的双指针解法。通过左右指针从数组两端向中间移动,每次计算当前容器的面积(由较短板和宽度决定),并移动较短边以寻找更优解。该方法将时间复杂度优化至O(n),空间复杂度为O(1)。关键在于理解移动较短边的合理性——保留较长边可能获得更大面积。代码简洁高效,体现了贪心思想,适用于同类问题。 关键词: 双指针、盛水容器、贪心算法、LeetCode、O(n)复杂度
2026-08-06 22:42:45
208
原创 LeetCode 热题 100——day4 移动零
摘要: 《移动零》问题要求将数组中的零元素移至末尾,同时保持非零元素原有顺序。通过双指针(i遍历数组,cur标记非零元素位置)实现原地交换,确保非零元素前移且顺序不变。时间复杂度O(n),空间复杂度O(1)。核心代码仅需一次遍历,交换非零元素至cur+1位置即可。该方法高效简洁,适用于类似数组操作场景。 关键词: 移动零、双指针、原地修改、数组操作、时间复杂度O(n)
2026-08-05 23:19:07
239
原创 LeetCode 热题 100——day3 最长连续序列
摘要: 文章分享了LeetCode「最长连续序列」的两种哈希表解法。方法一利用unordered_map合并连续区间,通过更新左右边界计算长度;方法二使用unordered_set从序列起点向后查找。两种方法均实现O(n)时间/空间复杂度。博主推荐了更巧妙的哈希表合并区间法,代码简洁高效。文末对比了两种思路,适合算法学习者参考解题策略。
2026-08-04 22:39:19
271
原创 LeetCode 热题 100——day2 字母异位词分组
摘要: 本文针对LeetCode「字母异位词分组」问题,提出两种解法: 排序+哈希表:将字符串排序后作为哈希表键值,直接分组,时间复杂度为 O(N × KlogK),代码简洁高效。 排序+连续分组:通过绑定排序后字符串与原字符串,整体排序后连续分组,无需哈希表,但复杂度略高(O(NK(logK + logN)))。 核心思路:利用字母异位词排序后结果相同的特性进行分组。哈希表法更常用,连续分组法提供另一种实现思路。两种方法均需注意时间与空间复杂度权衡。 关键词:字母异位词、哈希表、字符串排序、分组算法
2026-08-03 15:07:39
225
原创 LeetCode 热题 100——day1两数之和
文章摘要 本文针对LeetCode经典题“两数之和”提出三种解法:1. 暴力枚举通过双层循环遍历所有组合,时间复杂度O(N²);2. 哈希表利用空间换时间,用哈希表记录已遍历元素,将查找时间降至O(1),整体优化至O(N);3. 排序+双指针通过排序后左右指针逼近目标值,时间复杂度O(NlogN)。三种方法分别体现不同优化思路,哈希表方案在效率与空间权衡中最优。解题时建议从暴力解法入手,逐步优化至高效算法。 (字数:149)
2026-08-02 22:34:56
249
原创 【C++进阶】拒绝黑盒!纯手撕 list 底层源码与迭代器高级封装
四、核心接口:增删查改与容量操作 1 插入与删除 list 的灵魂在于插入和删除操作的高效性($O(1)$ 复杂度)。让我们看看如何实现: // 在pos位置前插入值为val的节点 iterator insert(iterator pos, const T& val) { Node* newNode = new Node(val); // 创建新节点 Node* cur = pos._node; // pos位置的节点 Node* prev = cur->_prev; // 前驱节点 // 调整四根指针的连
2026-05-28 22:58:04
665
16
原创 【C++ 进阶】list 核心机制解析及 vector 巅峰对决
这篇文章介绍了C++ STL中的list(双向循环链表)容器,主要内容包括: list的本质与结构:带头双向循环链表,包含哨兵节点实现简化操作,支持双向遍历; 核心特性对比vector: 优点:任意位置O(1)插入删除、按需分配内存、迭代器稳定性高; 缺点:不支持随机访问、缓存命中率低、额外指针存储开销; 常用构造方式:无参构造、填充构造、拷贝构造及迭代器区间构造; 迭代器使用:演示正向/反向遍历方法,强调只能通过迭代器访问元素。 摘要突出list与vector的核心差异,说明其适用场景(频繁增删),并保持
2026-05-28 20:49:40
640
5
原创 【C++进阶】从零手撕 vector 底层源码:解密三大原生指针的内存魔法
C++ vector 实现核心解析 本文深入剖析了 C++ vector 容器的底层实现原理,重点讲解了其内存管理机制和关键功能实现。文章首先介绍了 vector 的基本框架,通过三个核心指针(_start、_finish、_end_of_storage)来管理连续内存空间。然后详细讲解了迭代器支持、容量接口访问等基本功能的实现方法。 在内存管理部分,文章特别强调了 reserve 函数的正确实现方式,指出浅拷贝可能导致的内存崩溃问题,并提供了解决方案。最后,文章还介绍了默认构造、拷贝构造和析构函数等关键成
2026-05-26 10:30:00
690
32
原创 【C++进阶】vector 类从入门到精通:核心接口与内存机制实战指南
摘要 本文深入讲解了C++ STL中的vector容器,重点介绍了其核心特性和使用方法。vector作为动态数组,解决了原生数组固定大小的痛点,具备自动扩容、高效随机访问和丰富接口等优势。文章详细演示了迭代器的正向/反向遍历方式,并展示了四种常用构造方法:无参构造、填充构造、拷贝构造和迭代器区间构造。通过代码示例,帮助读者快速掌握vector的基础操作,为后续深入学习STL容器打下坚实基础。 (字数:149字)
2026-05-26 08:00:00
451
15
原创 C++ 模拟实现:string 类的底层真相与 Copy-and-Swap 现代黑科技
C++ string类底层实现解析 本文深入探讨了C++ string类的底层实现机制,主要包括以下核心内容: 底层构造逻辑:string类通过三个私有成员变量(_str、_size、_capacity)来管理字符串数据、长度和容量。 内存管理关键: 实现深拷贝的构造函数、拷贝构造函数和析构函数 避免浅拷贝导致的Double Free问题 迭代器实现:利用原生指针作为迭代器,支持范围for循环遍历 下标访问优化: 提供可读可写和只读两个版本的operator[]重载 通过assert进行越界检查 赋值运算符
2026-05-25 11:10:52
567
7
原创 C++ string类从入门到精通:核心用法与实战指南
本文介绍了C++中string类的核心用法,重点对比了C语言字符串的劣势与string类的优势。string类通过封装char*数组,实现了自动内存管理和丰富操作功能。文章详细讲解了字符串的4种构造方式、3种遍历方法(下标访问、迭代器、范围for循环),并强调了容量操作的重要性。作为STL的重要组成部分,string类极大简化了字符串处理,是C++开发者必须掌握的核心工具之一。后续文章将深入剖析string的底层实现原理。
2026-05-25 09:58:21
444
原创 【C++进阶】让编译器替你打工!一文打通泛型编程与 C++ 模板
本文深度剖析C++泛型编程与模板(Template)初阶的核心机制,带你告别冗余的函数重载,让“编译器替你打工”。文章详述了函数模板的底层类型推演原理,直击隐式/显式实例化中的类型冲突痛点,并给出了多模板参数(T1, T2)的硬核解决方案。全面总结了大厂常考的模板与非模板函数匹配原则。最后结合实战,规范了类模板的定义格式、类外成员函数作用域及避坑指南。干货满满,助你打破类型壁垒,为进阶STL标准模板库夯实底层内功!
2026-03-30 19:49:41
609
38
原创 C++ 动态内存管理:new/delete 的底层真相与避坑黑科技
本文深度剖析C/C++动态内存管理的底层逻辑,带你彻底扫清大厂面试与开发盲区。文章从程序四大内存战区切入,全方位对比malloc/free与new/delete的核心差异。不仅细致拆解了new/delete在对象及对象数组上的实战语法与异常处理机制,更硬核深挖了operator new与operator delete的底层源码实现。针对高危踩坑点,文章抽丝剥茧般揭秘了交叉释放导致内存泄漏与程序崩溃的底层真相(44字节Cookie之谜),最后拓展了内存池必备黑科技placement-new的用法。干货满满,助
2026-03-26 14:36:14
542
20
原创 【C/C++底层修炼】拆解动态内存管理:四大动态内存函数、六大错误与柔性数组
本文硬核拆解C/C++底层开发中至关重要的动态内存管理机制。文章从栈与堆的内存差异切入,深度剖析malloc、free、calloc与realloc四大核心函数的底层运作逻辑。针对开发痛点,独家总结了内存泄漏、野指针越界、重复释放等6大致命内存错误,并结合4道大厂经典笔试题,直击传值传址与生命周期等核心考点。最后,文章进阶探讨了C99标准下的黑科技“柔性数组”,揭秘其在防泄漏与提升CPU缓存命中率上的巨大优势。全篇带你建立完整的内存空间模型,真正做到“心中有内存”,写出极致安全的底层代码。
2026-03-25 14:00:47
608
15
原创 C++ 类和对象(下):初始化列表、static 成员与编译器优化深度剖析
本文是C++“类和对象”的硬核终结篇,直击进阶开发与大厂笔试痛点。文章深度剖析初始化列表的底层机制与顺序陷阱,探讨隐式类型转换及 explicit 防御编程;结合牛客实战题与经典笔试题,拆解 static 成员特性、内部类封装,彻底理清全局、局部与静态对象的构造析构时间线。最后揭秘匿名对象妙用,并多维度推演现代编译器(RVO/NRVO)如何抹平拷贝开销榨干极致性能。带你突破语法表层,建立真正的C++底层工程思维!
2026-03-23 17:30:53
658
30
原创 类和对象(中):六大默认成员函数与运算符重载全解析
本文是C++面向对象开发的进阶实战指南,深度剖析了类的“六大默认成员函数”。文章从工程实战出发,详细讲解了构造函数的自动初始化机制(结合MyQueue经典案例)与析构函数的底层资源清理避坑。硬核拆解了拷贝构造与赋值重载中的“深浅拷贝”灾难,并总结了参数引用的致命陷阱。此外,全面梳理了运算符重载的铁律、前置/后置++的底层区分、流操作符的友元实现及const权限法则。拒绝死记硬背,带你从底层把控对象生命周期与内存管理,彻底告别内存泄漏与野指针,写出健壮的C++工程代码!
2026-03-23 17:21:57
962
24
原创 类和对象(上)
本文是C++“类和对象”的入门篇(上),系统介绍了面向对象编程的基础核心概念。文章从C语言的struct顺滑过渡到C++的class,详细讲解了类的定义、访问限定符及声明与定义分离的工程规范。随后深入底层,剖析了对象的实例化机制、存储模型与内存对齐规则,并深度揭秘了隐藏的this指针原理。最后,通过经典实战检验题与C/C++的编程体验对比,帮助读者扎实底层基础,完成从面向过程到面向对象思维的初步跨越。
2026-03-18 19:51:40
799
28
原创 郑州轻工业大学“筑梯杯” 2025级新生程序设计大赛暨省内高校邀请赛——题解
本文为郑州轻工业大学“筑梯杯”2025级程序设计大赛暨省内高校邀请赛的全面题解。文章依据难度梯度,将题目划分为签到、简单、中档、困难及防AK五大模块进行系统复盘。内容不仅包含直观的基础解法,更深入剖析了从暴力模拟到复杂度极致优化的进阶过程。重点涵盖贪心策略、高精度移位运算、状态压缩(位运算枚举)、组合数学推导以及“二分答案+数学充要条件”等核心竞赛技巧。旨在通过纯粹的数学推演与思维“降维打击”,帮助大家拓宽算法思路,写出更高效优雅的 C++ 代码。
2026-03-18 19:49:08
433
9
原创 C++入门基础指南
本文介绍了C++基础语法入门知识,主要内容包括: C++的第一个程序(hello world示例) 命名空间(namespace)的概念与使用方法 C++输入输出(cin/cout)的基本使用 缺省参数(默认参数)的定义规则 函数重载的概念与实现条件 引用的基本概念与定义方法 文章通过对比C语言和C++的实现方式,展示了C++在命名空间、输入输出等方面的改进。重点讲解了namespace解决命名冲突的原理、C++标准库std的使用规范、缺省参数的使用规则以及函数重载的实现条件。最后简要介绍了引用的基本概念。
2026-03-14 09:33:03
996
42
原创 C++的输入输出(下)(算法竞赛类)
本文是C/C++算法竞赛入门的输入输出进阶指南!文章总结了题目中单组与多组测试用例的常见处理模板,分享了巧妙读取带空格字符串与提取数字位数的实战小技巧。重点剖析了 `scanf/printf` 与 `cin/cout` 的性能差异,并给出了终极提速秘籍:通过取消同步与绑定(`ios::sync_with_stdio(false)`等)来大幅提升 `cin/cout` 的读取速度。同时高亮了避坑细节——关流优化后务必使用 `'\n'` 替代 `endl`,防止缓冲区频繁刷新拖慢速度。助你刷题彻底告别TLE
2026-03-14 09:31:35
439
6
原创 牛客小白月赛126
这篇文章是牛客小白月赛126的题目解析,围绕多道“小红”主题题目展开,涵盖A“小红打舞萌”、B“小红写谱”、C“小红出勤”、D“小红越级(easy)”、G“小红越级(hard)”、E“小红做梦”、F“小红开机厅”等题型。每道题的解析均按“题目-思路-代码”的结构呈现:先展示题目内容,再讲解解题思路,最后附上实现代码,为用户提供了从题目理解到代码落地的完整指导。
2026-01-01 18:24:21
909
70
原创 C++ string 类详解:概念、常用操作与实践(算法竞赛类)
这篇是 C++ string 实用指南:需含头文件<string>,支持多方式创建字符串;输入分cin(常规)与getline(带空格输入,含默认 / 自定义结束标志)。 size()取长度,迭代器begin()/end()实现遍历、改字符;操作含push_back尾插、+=拼接、insert指定插入、pop_back尾删;find()多类型查找、substr()截取(二者常配合)。 它支持关系运算,还可通过stoi/stod转数值、to_string转字符串,实现双向类型转换。
2026-01-01 18:17:03
1608
56
原创 星轨初途创作纪念日:这程文字星路,刚走满 128 个明亮日子
《星轨初途创作纪念日:这程文字星路,刚走满128个明亮日子》是我的创作纪念文。起初我将创作当作学习笔记,意外结缘志趣相投的朋友后,逐渐爱上这段分享时光。至今我写下24篇文章,收获超2.6万访问量与百余粉丝,也结识了同好博主与技术大佬,常交流学习、互促成长。如今创作已成日常,是我巩固知识的独特方式;期间既产出了心仪的算法文章,解题时的思维突破也让我欣喜。文末还分享了我的短期学习计划与后端开发的长期目标,盼与大家继续在文字星路上同行。
2025-12-26 16:43:40
599
11
原创 郑州轻工业大学2025天梯赛解题
本文是郑州轻工业大学2025天梯赛的解题总结,以“三阶段”梳理题目与对应解法:第一阶段聚焦基础题,涉及比较、枚举等思路,如“奇变偶不变”覆盖暴力枚举与前缀和两种方法;第二阶段进阶题则包含二次函数、差分+前缀和等技巧,像“熊孩子开关灯”对比了暴力与优化解法;第三阶段聚焦双指针、数位独立、链表模拟等方法,例如“信号基站”题从暴力枚举优化为数位独立思路,“链表奇偶拆分”通过模拟实现节点拆分。文章核心是展示从基础到进阶的解题逻辑,强调针对不同题目从暴力思路转向针对性算法优化,提升解题效率。
2025-12-26 15:25:46
973
6
原创 C++的条件判断与循环及数组(算法竞赛类)
本文是算法竞赛向 C++ 教程,聚焦条件判断、循环及数组相关内容。数组部分:讲解 auto 关键字,解析范围 for 的功能、语法,明确其适配静态数组、STL 容器的场景与动态数组等受限场景,附带 C++11 编译器配置;介绍 memset(数组内容设置)、memcpy(数组拷贝)的功能、头文件及实现。字符数组部分:详解带空格字符串读取法(gets/fgets、改 scanf 格式、getchar 逐读),讲解 strcpy、strcat 的使用,对比其与 memcpy 的差异,最后补充函数头文件说明,助力
2025-12-01 19:28:22
1835
47
原创 C++的输入输出(上)(算法竞赛类)
本文聚焦算法竞赛场景,讲解C++输入输出相关知识,内容涵盖:先介绍`getchar`与`putchar`的功能、头文件、返回值等细节及二者结合使用的方式;接着提及`scanf`、`printf`及占位符的相关内容;随后讲解`cin`和`cout`的基础用法、连续输入输出操作,并分析其优劣势;还补充了`cout`的格式输出技巧(含控制宽度、数值格式、整数格式、对齐方式等),帮助读者掌握算法竞赛中C++输入输出的核心用法。
2025-11-29 20:28:58
1829
57
原创 C++入门(算法竞赛类)
这是一篇C++入门指南类文章,核心内容围绕C++基础学习展开:首先介绍工具安装的相关内容,随后聚焦“第一个C++程序”,涵盖基础程序框架、头文件的相关知识、cin与cout的入门(含核心流对象、关键操作符、C++输入输出的优势),以及名字空间的核心作用、std名字空间的概念与两种使用方式;后续还将讲解数据类型、变量和常量、算术操作等内容,最后以结束语收尾,整体是面向C++初学者的基础入门内容。
2025-11-29 12:42:11
1344
53
原创 数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
本文是初阶数据结构与算法专栏内容,聚焦计数排序及排序算法分析。文中先介绍非比较排序中的计数排序:讲解其概念、算法步骤,给出代码实现,分析其时间与空间复杂度,总结优劣势并做排序对比。随后解析排序算法的复杂度与稳定性:阐释算法稳定性核心概念,拆解各类排序算法的空间复杂度与稳定性,辅以图表直观呈现。文末含补充内容与结束语,本专栏至此完结,后续将更新加餐内容,下一篇将开启C++学习。
2025-11-27 13:24:32
1328
17
原创 数据结构排序算法详解(4)——归并排序(附动图)
本文围绕归并排序展开讲解,开篇介绍其核心思想与步骤(搭配动图辅助理解)。随后阐述递归实现归并排序的代码及核心内容分析;重点讲解非递归版本,说明其实现思路,解析关键的gap迭代与分组逻辑,以及“分组→合并→覆盖”的执行闭环,并附代码实现。文章还说明归并排序的时间复杂度,阐述其特性,将其与四大排序做对比,最后提供总代码。全文清晰呈现归并排序的两种实现方式、核心细节与排序对比,助力读者全面掌握归并排序。
2025-11-26 16:19:38
1478
42
原创 数据结构排序算法详解(3)——交换排序(附动图)
本文围绕交换排序展开讲解,先介绍冒泡排序的概念、实现方式、时间复杂度及特性。核心聚焦快速排序:涵盖其由来与思想,Hoare原版递归实现、优化策略(三数取中、小区间优化),以及Hoare前后指针版、挖坑法快速排序,还涉及三类快排的封装与时间复杂度分析。接着补充快速排序的非递归实现,讲解用栈、队列实现快排的方式及对应时间复杂度。之后对比插入排序、选择排序与交换排序的特点,最后提供栈、队列的实现代码及排序总代码,以结束语作结。
2025-11-26 08:39:35
916
24
原创 数据结构排序算法详解(2)——选择排序(附动图)
本文聚焦选择排序体系展开解析,涵盖直接选择排序、堆排序,及与插入排序的对比。首先介绍直接选择排序的概念与实现,说明其时间复杂度为O(n²),并梳理其核心特性;继而讲解堆排序的概念及基于堆结构的实现逻辑,指出其时间复杂度稳定为O(nlogn)、空间复杂度O(1),还提及可用于Top-K问题(效率达O(n+klogn)),同时总结其特性。文章还对比了插入排序与选择排序的差异,附总代码示例辅助实操理解。全文以清晰的层级,为选择排序的学习、应用提供了实用指引。
2025-11-25 12:12:25
1280
29
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅