- 博客(8)
- 收藏
- 关注
原创 高频基础算法——并查集(图解关键操作)与经典应用详解
先看暴力做法:假如有个10000的数的集合与一个200的数的集合,要么将前者的每个数编号改变下,要么将后者编号改变,无论那种都会取决数据的规模,一般这种题就会卡你时间而且会有局端数据存在,肯定就超时了。基本原理:每个集合用一个树来表示。树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]的值 表示 x 的父节点。
2024-11-20 21:45:14
771
原创 基础算法——详细解析Trie树的数组模拟与典型应用!
N为最多节点的数目,就是字符串的最大长度;son[N][26]存储每个节点的所有儿子。一维是结点总数(等价字符串长度),因为字符串中只包含小写字母,因此每个节点最多有26个子节点;cnt[N],是以当前节点结尾的单词有多少个; 从根节点p = 0开始,如果当前节点上不存在这个字母就创建一个,也就是将 son[0][字符编号] == ++idx,那当前这个p节点就存在下一个节点了,让p = son[p][u]。如果存在 p 就走到 存在的那个字母节点上,再看下一个节点是否存在,就这样循环往复,直到遍历完字
2024-11-19 21:47:52
704
原创 基础算法——图解带你深刻理解KMP匹配
两层for循环判断 i从0开始遍历较长字符串 S,j每次从1开始遍历模式字符串 P。遇到相同字符 j ++ ,不同内层循环中断,外层循环继续。这样在我们发现 在S[i] 与 P[j + 1]不相等时,直接让 j 指向 next[j] 的位置避免掉 1 到 B的重复比较 (下图帮助理解)P中存在一个以 j指针为终点的 长度为 B 的字符串与 从 P的起始点开始的 长度也为 B 的字字符串相等。假设两字符串长度为n。那么时间复杂度O(n2)。这在算法题中肯定是超时的,因为题目一般会设置较大数据量。
2024-11-18 21:36:20
819
原创 基础算法——单调栈和单调队列的最常用考法
i指针每往右边移动时,把每个数存到栈里,把目光放到栈里,将数在栈中操作,这样每个数操作一次就行了,整体时间复杂度就是O(n)给定一个序列,求序列当中每一个数左边离他最近的数,且比他小(大)的数在什么地方,对称下就可类比为右边最近比他(大或小的数)。两重循环,i枚举每个数,j从 i-1开始往左边找第一个比a[i]小的,时间复杂度为O(n2),很大可能会超时。单调栈和单调队列虽然有点抽象但在算法题中很少涉题。
2024-11-17 22:10:56
412
原创 基础算法——栈的静态数组模拟实现与经典应用
经典应用——中缀表达式求值 相比于,使用cpp中自带的栈,模拟栈能在数据量小于 10的5次方时 “微快” 创作不易,多多点赞支持,感谢大家啦
2024-11-17 17:09:26
261
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅