- 博客(16)
- 收藏
- 关注
原创 夜深人静学算法之单调栈
使用单调栈算法可以高效解决"寻找每个元素左边第一个不小于它的元素"问题。该算法通过维护一个单调递减的栈,在O(n)时间内完成计算。实现步骤包括:1)设置哨兵元素;2)从左到右遍历数组;3)弹出小于当前元素的栈顶元素;4)记录栈顶元素作为结果;5)将当前元素入栈。该算法可灵活调整比较条件和遍历方向,适用于求左右两侧第一个大/小于当前元素的变种问题,相比朴素O(n²)算法显著提升了效率。示例代码展示了使用栈记录下标的实现方式。
2025-11-09 21:29:39
233
原创 力扣 1比特与2比特字符
我们可以把这个问题当作一个跳一跳的游戏。首先从第一个位置开始,如果这个位置的值为0,那么往后面跳一格,因为0只能和自己配对;如果该位置的值是1那么跳两格,如果恰好可以跳到n-1的位置那么就返回true(说明最后的0可以自己配对),反之则不可以。
2025-10-04 23:55:30
172
原创 蓝桥云课——黄金树
《黄金树节点权值求和问题》摘要: 题目要求计算二叉树中黄金指数为0的节点权值之和。黄金指数计算规则:根节点为0,左子节点为父节点指数+1,右子节点为-1。解题采用邻接矩阵存储树结构,通过DFS递归计算各节点黄金指数:左子节点指数=父节点+1,右子节点=父节点-1(跳过-1表示的空节点)。最后遍历统计黄金指数为0的节点权值累加和。算法时间复杂度O(n),空间复杂度O(n),能高效处理1e5量级数据。核心在于选择合适的数据存储方式和正确实现DFS遍历计算。
2025-09-26 18:36:35
931
原创 蓝桥云课逆序对的数量
我们可以逆序遍历数组,每当我们遍历到一个数组的值ai,我们就在树状数组的相应位置标记一个1,代表存在一个值为ai的数,然后求sum(1,ai-1)的值即为与ai配对的逆序对。经过一次扫描就可以得到统计所有的逆序对,但是如果数值过大我们空间就会受到限制,又注意到数据量是远远小于数值的大小的,所以这里我们可以使用离散化对数据进行压缩。给你一个长度为n的数组,要你求解有多少组数据满足i<j,并且ai>aj,也即逆序对的数量。
2025-09-20 17:05:42
223
原创 夜深人静学算法之树状数组
树状数组是一种高效处理单点更新和区间求和的数据结构,能在O(log n)时间内完成操作。相比静态的前缀和,它支持动态修改数组元素。其核心是lowbit函数,通过二进制操作快速定位节点关系。树状数组以数组形式存储,但逻辑上呈现树状结构,每个节点记录特定区间的和。单点更新时需要向上更新所有相关父节点,区间查询时则通过累加多个区间块实现。本文详细介绍了其基本原理、应用场景,并提供了代码实现示例。这种数据结构特别适合需要频繁更新和查询的场景。
2025-09-20 16:42:05
1015
原创 洛谷P10497 [USACO03OPEN] Lost Cows
摘要:本文介绍了一种利用树状数组和二分查找解决牛排序问题的方法。已知每头牛前面编号比它小的数量,要求还原原始排列。通过逆序遍历,将问题转化为在动态集合中查找第k小的元素。使用树状数组维护可用编号,结合二分查找确定每个位置的值,时间复杂度为O(n log²n)。该算法高效处理了频繁的单点更新和前缀和查询,适用于类似需要动态维护有序集合的问题。
2025-09-15 02:00:00
697
原创 夜深人静学算法之最小生成树(Prim朴素版本)
摘要:最小生成树(MST)是连通带权无向图中权值之和最小的生成树。文章详细介绍了Prim算法的实现:1)使用邻接矩阵存储图,初始化所有边权为无穷大;2)维护两个数组,vis标记节点是否在树中,dis记录各点到树的最短距离;3)算法采用贪心策略,每次选择距离最近的节点加入,并更新邻接节点的距离。Prim算法时间复杂度为O(n²),适合稠密图。文末还提供了代码实现示例和相关练习题,为学习图论算法提供了实用指导。
2025-09-04 23:46:01
446
原创 夜深人静学算法之二分查找
摘要:文章介绍了高效的二分查找算法,通过"红绿灯模板"讲解其原理。算法通过不断缩小搜索范围,在有序数组中快速定位目标值,时间复杂度仅为O(logN)。作者以童年故事引入,对比了暴力搜索的不足,详细演示了查找过程,并给出代码实现和边界处理。最后指出二分查找不仅可以用于数据查询,还能应用于更复杂的二分答案问题。
2025-08-26 23:35:56
544
原创 夜深人静学Pathon之字典
本文总结了Python字典的核心操作,涵盖增删改查四类操作。新增操作包括单键值对添加和批量更新;删除操作支持指定键删除、安全删除和清空字典;修改操作针对已有键更新值;查询操作包含直接取值和安全取值方法,并介绍了键存在性判断和三种遍历方式(键、值、键值对)。此外,还说明了popitem()在Python3.7+中的有序特性。这些方法兼顾了操作效率与安全性,是处理字典数据的必备技能。
2025-08-19 16:39:36
142
原创 迭代法和递归法求斐波那契数列任一项
斐波那契数列(Fibonacci sequence),又称:数列的前两项通常是0和1(也有版本以1和1作为初始值)。
2024-09-25 15:48:42
355
原创 计算圆周率
/以上循环是从第二项开始的,所以加上第一项的两倍。j++)//2.内循环求取分子和分母的前n项积;//a代表分子,b代表分母;i++)//1.外循环求取前n项和;2.内循环求取分子和分母的前n项积;1.外循环求取前n项和;
2024-02-08 20:34:06
429
原创 组个最小数pta
k++)//1.输入零到九这十个数所拥有的个数。k++)//2.排第一位,不为零且尽可能最小。k++)//3.排剩下的,先排小数在排大数。1.输入零到九这十个数所拥有的个数。2.排第一位,不为零且尽可能最小。3.排剩下的,先排小数再排大数。
2023-12-19 21:41:32
858
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅