- 博客(29)
- 收藏
- 关注
原创 数据结构-平衡二叉树——对二叉搜索树的优化
本文介绍了平衡二叉树(AVL树)的概念及其实现方法。AVL树是对二叉搜索树的优化,通过平衡因子(BF)确保树的高度平衡,避免搜索效率从O(logn)退化为O(n)。文章详细解释了四种旋转操作(左旋、右旋、左右型、右左型)及其应用场景,并提供了简单的代码实现。AVL树通过旋转调整保持平衡,确保高效的搜索性能。
2026-06-10 17:33:20
164
原创 数据结构-从二分查找到二叉排序树
本文介绍了二叉排序树(BST)的基本概念、性质及操作。BST是一种左子树值小于节点值、右子树值大于节点值的二叉树,其中序遍历结果为升序序列。文章详细讲解了BST的创建、搜索、插入和删除操作,重点分析了删除节点时的三种情况处理方式。BST通过树形结构实现了类似二分查找的高效搜索,虽然构建需要额外时间,但能有效提升后续查找效率。代码示例展示了BST的核心操作逻辑,为理解这一数据结构提供了实践参考。
2026-06-04 21:31:20
279
原创 算法-贪心
摘要:贪心算法是一种基于局部最优选择的思想,而非固定模板。它通过每次选取当前最优解来逼近全局最优解,适用于特定问题。文章介绍了贪心算法的基本概念,并提供了两个实例:接水问题(贪心+模拟)和混合牛奶问题(纯贪心解法)。代码示例展示了不同场景下的贪心实现方式,指出纯粹的贪心题目较少但解法灵活。
2026-05-12 16:08:23
254
原创 搜索算法-广度优先搜索(BFS)
本文介绍了广度优先搜索(BFS)算法及其实现。BFS采用"波纹扩散"式搜索,从起点开始逐层遍历相邻节点,适合处理深度较大或内容较多的场景。文章通过棋盘找棋子的例子形象说明BFS的工作原理,并给出队列实现的具体思路。针对洛谷P1141迷宫问题,提供了非递归BFS的代码实现,包括初始版本和优化后的记忆化搜索版本(使用连通块预处理)。最后指出该问题不适合递归实现BFS,建议读者参考其他资料了解递归实现方式。
2026-05-08 18:23:29
310
原创 搜索算法-深度优先搜索DFS
本文介绍了深度优先搜索(DFS)算法的实现与应用。通过洛谷题目"奇怪的电梯"为例,详细讲解了非递归和递归两种DFS实现方式,并重点分析了剪枝优化策略。文章指出,非递归DFS利用栈结构更易实现回溯,而递归版本代码更简洁但效率较低。作者建议在数据量较大时使用广度优先搜索(BFS)获取最优解更高效,并强调DFS作为基础算法的重要性。最后通过算法特性类比人生,指出适当剪枝能提升搜索效率。
2026-02-23 20:04:55
623
原创 数据结构-数组模拟队列和循环队列
本文介绍了队列和循环队列的实现方法。队列遵循先进先出原则,可通过C++ STL中的queue或数组模拟实现。循环队列通过取模运算实现首尾相连的特性,避免空间浪费。文中提供了两种队列的完整代码示例,包括push、pop和判空操作,展示了数组模拟队列和循环队列的具体实现方式,重点说明了循环队列中取模运算对指针位置处理的关键作用。
2026-02-21 19:10:47
161
原创 数据结构-数组模拟单链表和栈
本文介绍了使用数组模拟单链表和栈的方法。对于单链表,可以利用数组下标作为指针,通过数组元素值指向下一个节点的索引位置,实现链表遍历。文中给出了两种实现方式:单数组存储值和指针,或双数组分别存储数据和指针域。对于栈的实现,通过维护一个指针变量来动态管理数组边界,实现入栈(push)和出栈(pop)操作。文章提供了完整的C++代码示例,展示了如何使用数组模拟这两种数据结构的基本操作。这种数组模拟方法在特定场景下可以替代指针实现,具有内存连续、访问高效的特点。
2026-02-02 04:32:29
72
原创 数据结构-双链表实现栈和队列
本文介绍了栈和队列的两种实现方式:使用C++ STL容器和双链表。栈遵循先进后出原则,可通过STL的stack容器或双链表实现;队列遵循先进先出原则,可用STL的queue容器或双链表实现。文章提供了详细的代码示例,包括压栈/入队、出栈/出队等基本操作,并推荐了相关学习资源。双链表实现方式因其双向遍历特性,在操作复杂度上更具优势。两种数据结构在算法和程序设计中都有广泛应用。
2026-01-27 16:16:23
450
原创 数据结构-双(向)链表
双链表是在单链表基础上扩展的数据结构,每个节点同时存储前驱和后继指针,实现双向遍历。相比单链表,双链表能降低特定情况下的搜索复杂度。代码示例展示了双链表的创建、正向/反向遍历以及节点删除操作。删除节点时需调整前后节点的指针指向。双链表本质上是对单链表的增强,理解其双向指针特性即可掌握核心原理。
2026-01-27 14:50:37
292
原创 数据结构-单链表
本文介绍了链表数据结构的基本概念和单链表的实现方法。链表由节点和指针构成,通过指针连接各节点形成链式结构。文章详细讲解了单链表的四种基本操作:遍历链表、查找节点、删除节点和插入节点,并提供了相应的C++代码实现。文中将链表形象地比作"非连续数组",指出理解链表只需掌握指针基础知识即可,无需深入理解指针。这些内容为初学者提供了清晰易懂的单链表入门指南。
2025-12-24 23:58:00
519
原创 算法-前缀和
我们可以简单地把前缀和理解为累加数组假设我们有一个数组现在我们想求其中第 n 的元素的前面数据的总和,那我们就可以使用前缀和我们再次定义一个数组,这个数组为发现了吗,我们这个数组其实就是:前缀和的存在很好地把原来数组求和的时间复杂度从O(n)降为了O(1),这种预处理空间换时间单从代码部分来看,我们可以感受到前缀和其实是不难的算法,但是算法学习的难度从来不在算法本身,而是对于算法的运用。当题目出现的时候你可以知道要用哪个算法时,便可以说是轻舟已过万重山。答应我bro,看完找点题刷刷,会有新的理解。
2025-12-22 23:59:59
1241
原创 算法-快速幂
快速幂本质上不是特别难的算法,只要对C和C++语言的语法掌握比较基础,对位运算稍微有点理解,我们便可以写出快速幂2%20+
2025-12-21 15:21:26
340
原创 质数筛-埃氏筛
本文介绍了质数的定义及两种筛法:暴力筛和埃氏筛。暴力筛通过逐个判断数的因数来确定质数,效率较低。埃氏筛采用空间换时间的策略,通过标记非质数的倍数来提高效率,其时间复杂度优于暴力筛,但较欧拉筛仍有优化空间。文章提供了两种筛法的代码实现,并指出可以通过调整循环条件和打表等方法来优化性能。埃氏筛在理解难度上相对较低,适合算法初学者使用。
2025-12-20 19:07:03
160
原创 排序算法-快速排序
快速排序是一种基于分治思想的排序算法,通过左右指针和递归实现。算法选取中间元素为基准值,将小于基准的放左边,大于的放右边,然后递归处理子数组。文中以数组[5,4,3,2,1]为例说明排序过程,并提供了C++实现代码,包括基准值选取、左右指针移动和元素交换等关键步骤。代码中需要注意递归边界条件,避免遗漏或溢出。该算法平均时间复杂度为O(nlogn),是一种高效的排序方法。
2025-12-20 14:49:58
394
原创 排序算法-归并排序
归并排序的整体难度起始不大,然后复杂度和稳定性这两个方面的话,我不清楚这个复杂度是怎么算出来的,但是我查出来是O(归并排序不是一个稳定的算法,因为临时数组会反复地把原数组进行覆盖。
2025-12-20 01:02:59
748
原创 查找算法-二分法
二分查找是一种可以快速查找所需元素的算法,但是二分查找的前提是数组元素必须有序,这就导致了二分查找的局限性,所以在实际的使用场景中,我们使用二分的情况不多。(而且在算法比赛中考察的也不太多)%5Clog%20n。
2025-12-19 00:44:05
644
原创 双指针-左右指针
本文只是对左右指针的概念进行描述,对其过于具体的使用暂不赘述,但左右指针毫无疑问是比较重要的模板之一。t=P9T8167. 两数之和 II - 输入有序数组https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/
2025-12-18 03:04:15
848
原创 双指针-快慢指针(龟兔指针)
快慢指针是一种优化遍历效率的编程思想,通过两个指针以不同速度遍历数据来降低时间复杂度。文章通过数组去重、元素删除和最长不重复子序列三个例题,展示了快慢指针的具体应用。常规暴力解法往往需要多重循环,时间复杂度较高,而快慢指针解法能显著提升效率。最终优化的单层循环解法将时间复杂度降到O(n),体现了快慢指针在算法优化中的重要作用。该思想强调的不是具体算法,而是一种通过指针协作来提高程序效率的思维方式。
2025-12-18 01:38:53
664
原创 大整数运算-除法(高精度)
高精度除法是四则运算中最复杂的操作,需要借助高精度减法实现。其核心思路是模拟长除法过程:从左到右逐位处理被除数,当当前数值足够大时进行减法运算,记录相减次数作为商。代码实现中需要注意处理前置零和余数问题。该算法适用于超出语言内置数据类型范围的超大数运算,通过vector存储数字并实现比较、减法等辅助函数来完成整个除法过程。
2025-12-15 18:38:08
362
原创 大整数运算-乘法(高精度)
本文介绍了高精度乘法的实现方法。通过将输入数字倒置存储,逐位相乘并处理进位问题。关键点在于:1)两位数相乘结果不超过三位;2)需要二次循环处理可能的连续进位。文中给出了C++实现代码,展示了如何通过两个嵌套循环完成乘法运算,并处理进位问题。代码先计算各位乘积并暂存结果,最后统一处理进位和输出。这种方法有效解决了大数相乘的精度问题。
2025-12-08 19:28:44
213
原创 大整数运算-减法(高精度)
摘要:高精度减法是对减法运算的模拟,用于处理超出longlong范围的数据。主要难点包括:处理相等数相减、减数大于被减数、借位导致的前导零,以及长度不一致问题。解决方案包括特殊判断、交换减数和被减数、消除前导零等。代码实现通过将数字反转存储、逐位相减并处理借位,最后反转输出结果。该算法有效解决了大数减法问题,但需要注意边界情况的处理。
2025-12-05 19:37:37
341
原创 大整数运算-加法(高精度)
摘要:本文介绍了C++中高精度加法的实现方法。针对常规整型无法处理超大数字的问题,通过模拟人工加法过程,采用字符串存储数字并反转对齐的方式解决。重点阐述了处理进位和对齐问题的技巧:使用临时变量存储进位值,将数字字符串反转实现左对齐。文中提供了完整的C++实现代码,包括字符串转数字、补零操作和加法模拟过程,并指出该原理同样适用于C语言实现。
2025-12-04 17:49:34
257
原创 排序算法-计数排序
也是顾名思义,计数排序就是计算一个数出现的次数,然后排序。计数排序没有对原数组直接进行操作,而是另外开一个数组进行统计(所以或许你可以叫它统计排序?,所以计数排序的思路相当简单,而。
2025-11-30 11:20:54
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1