
数据结构
文章平均质量分 89
包含了一些算法竞赛中常用的数据结构(初级和高级)
每天和狼对视一分钟能锻炼你的野性
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图论:最小生成树
本文介绍了两种最小生成树算法:Prim算法和Kruskal算法。Prim算法采用贪心策略,从节点角度构建最小生成树,通过维护节点到树的距离实现优化,适用于稠密图,时间复杂度为O(V²)或O(ElogV)。Kruskal算法通过边构建最小生成树,使用并查集判断连通性,按边权排序后逐步选择边,适用于稀疏图,时间复杂度为O(ElogE)。文章详细分析了两种算法的实现步骤、模板代码(包括邻接矩阵和邻接表版本)以及适用场景,并通过寻宝问题展示了具体应用。两种算法各有优势,应根据图的稠密程度选择合适的实现方式。原创 2025-07-25 19:05:16 · 1583 阅读 · 0 评论 -
图论:并查集
本文介绍了并查集(Disjoint Set Union)这一数据结构及其应用。并查集主要用于处理不相交集合的合并与查询问题,核心功能包括:1)合并两个集合;2)判断两个元素是否属于同一集合。文章详细讲解了并查集的实现方法,包括路径压缩优化、初始化操作、查找函数(find)、合并函数(join)和判断函数(is_same)。通过三道例题(寻找存在的路径、冗余的边、冗余的边II)展示了并查集的实际应用,并分析了不同情况下的处理策略。特别强调了并查集在判断连通性和检测环时的重要作用,为后续学习其他算法如Dijks原创 2025-07-25 13:22:40 · 1218 阅读 · 0 评论 -
二叉树(建立 + 遍历 + 拓展)
本文分享了二叉树入门学习的心得,重点介绍了二叉树的构建、三种DFS遍历方式(前序、中序、后序)以及实际应用。通过4道洛谷题目(P4913、B3642、P1305、P3884)的代码解析,展示了如何求二叉树深度、实现不同遍历方式、处理字符二叉树以及计算节点间距离。特别强调了用后序遍历求最近共同祖先的技巧,并提供了通过父节点数组存储法优化查找的思路。文章以具体代码示例帮助理解二叉树的基本操作和递归思想。原创 2025-07-18 15:45:07 · 972 阅读 · 0 评论 -
string + 栈 & bitset & 可达性统计(拓扑排序)
本文总结了栈、bitset和拓扑排序的算法应用。通过"最优屏障"和"吐泡泡"两道例题展示了单调栈在处理元素匹配问题中的优势。介绍了bitset的常用操作,包括二进制转换和位运算,并通过"小红组比赛"、"简单瞎搞题"和"起床困难综合征"等题目演示了bitset在状态压缩和位运算优化中的应用。最后详细讲解了拓扑排序算法,通过"视频讲解"和"可达性统计"两道例题展示了如何利用原创 2025-07-17 15:21:33 · 1451 阅读 · 0 评论 -
优先队列&赛后补题
本文比较了优先队列和集合(set)的使用场景,分析了两者的异同点。优先队列适用于需要频繁插入并自动排序但无需查找元素的场景,而set适合需要快速查找的有序集合。文章详细讲解了优先队列的实现原理(二叉堆)和两种类型(大根堆/小根堆),并通过动态中位数问题展示了对顶堆的应用。此外,还分享了Codeforces和牛客竞赛的解题思路,包括双指针技巧、滑动窗口优化等算法在具体问题中的应用,如处理循环移位数组的统计问题。最后通过预处理和逆向遍历等技巧优化了算法效率。原创 2025-07-14 15:13:48 · 735 阅读 · 0 评论 -
单调栈&单调队列【算法进阶】
本文总结了单调栈和单调队列的应用与实现。单调栈适用于寻找元素左右第一个大于/小于它的元素,如柱状图最大矩形问题;单调队列优化滑动窗口可用于求子数组极值问题。文章详细讲解了LeetCode 84、85、862等典型题目的解法,并提供了代码实现。通过预处理和单调性维护,这两种算法能将时间复杂度优化至O(N)。最后对比了两种滑动窗口的实现方式:双端队列适用于满足条件的子数组区间,单调队列则用于维护元素前的最值。原创 2025-07-12 10:42:23 · 795 阅读 · 0 评论 -
Map容器&用map优化程序
本文总结了map的基础知识和操作,包括map的定义、增删改查、元素访问和遍历方法。通过5道编程题目练习了map的实际应用:1)同构字符串验证;2)字母解码;3)完美K倍子数组;4)和为K的子数组;5)叫号系统实现。重点讲解了map的两种遍历方式(迭代器遍历和快速遍历)以及注意事项,如自动排序特性导致的时间消耗问题、正确使用迭代器访问元素等。摘要概括了map的核心用法和典型应用场景,帮助快速回顾map的基本操作和解题思路。原创 2025-07-10 14:48:56 · 838 阅读 · 0 评论 -
单调栈(详解)
本文总结了单调栈的基本概念和应用。单调栈分为单调递增栈和单调递减栈,主要用于求解数组中元素右边或左边第一个大于/小于当前元素的值。文章通过多个例题展示了单调栈的具体应用,包括处理温度变化、计算雨水容量等场景,并提供了对应的代码实现。同时强调了单调栈的核心思想:在维护栈的单调性过程中,及时弹出无用元素,利用栈顶元素解决问题。最后指出需要通过大量练习来掌握这一数据结构,建议养成总结习惯以提高理解。原创 2025-07-08 14:42:27 · 831 阅读 · 0 评论 -
单调队列&双端队列
本文系统讲解了双端队列和单调队列的原理与应用。首先介绍了双端队列的基本操作(push_front/pop_front/push_back/pop_back)及其特点——支持两端操作。重点剖析了单调队列的核心思想:通过维护队列的单调性(递增/递减)来高效解决滑动窗口最值问题,时间复杂度O(N)。通过洛谷P1886滑动窗口模板题,详细演示了如何用数组模拟单调队列来求窗口最值,并给出了AC代码。此外,还介绍了单调队列在切蛋糕、逛画展、质量检测等题目中的典型应用,对比分析了存索引和存值两种实现方式的差异。最后总结了原创 2025-07-07 14:30:33 · 684 阅读 · 1 评论 -
C++中STL的部分容器的应用
有一个B<----(C)<----A的车站,列车从A开过来然后车站C是一个不能掉头的死胡同,意思就是到车站之后只能往B走了, A中列车的原始列车序列为:1 2 3 …对于所求问题--国籍有几种,可以用类似桶排序的思想,开一个数组,每一个角标代表一个国籍,对应的元素就是这个国籍的的人数,其次需要开一个结构体来储存每一个人的信息(主要就是到达的时间和国籍),然后再思考问题,对于每一艘船的前24小时之内,如果有船不在这时间范围内,就会剔除掉,而这艘船正好就是比较先到的船只,遵。循先进先出原则,即队列的数据结构。原创 2025-04-15 21:30:09 · 798 阅读 · 0 评论 -
C++中常用的STL容器
【代码】C++中常用的STL容器。原创 2025-04-15 11:55:39 · 305 阅读 · 0 评论