文章目录
- 回溯法
- morris遍历介绍
- 不重复子字符串的滑动窗口算法
- 大数越界问题:随着 n 增大,f(n) 会超过 Int32 甚至 Int64 的取值范围,导致最终的返回值错误。
- 字符串中的回文子串以及最长回文子串
- 背包九讲问题
- 遇到比较的题,考虑能否自定义比较器,如leetcode179题8
- 基本计算器问题,leetcode224,227
- 洗牌算法(Fisher-Yates) leetcode 384
- 滑动窗口的最大值
- 约瑟夫环的问题:剑指offer62
- 循环依赖 leetcode补充题23,leetcode207,210
- 图的表示法与常用的转化算法
- 回溯算法 leetcode46,47
- kmp算法
- 二叉搜索树的三个特性:
- 并查集 leetcode 547 省份数量
- 鸡蛋掉落 leetcode 887(理解较为困难,要多看几遍)
- 递归的时间复杂度计算公式
回溯法
- 一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试
morris遍历介绍
- morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。
- morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现空间开销的极限缩减。
- https://zhuanlan.zhihu.com/p/101321696
不重复子字符串的滑动窗口算法
大数越界问题:随着 n 增大,f(n) 会超过 Int32 甚至 Int64 的取值范围,导致最终的返回值错误。
- 做斐波那切数列时注意到的
字符串中的回文子串以及最长回文子串
-
字符串中回文子串的数目
- 中心拓展
- 中心拓展
-
Manacher算法(马拉车算法)
- 利用回文特性
- 利用回文特性
-
岛屿数量:可以采用深度优先遍历,广度优先遍历,
- 还可以采用并查集
-
搜索回溯算法 leetcode 39 组合之和
- 什么时候使用used数组,什么时候使用begin变量
- 排列问题,讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为不同列表时),需要记录哪些数字已经使用过,此时用 used 数组
- 组合问题,不讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为相同列表时),需要按照某种顺序搜索,此时使用 begin 变量。
- 什么时候使用used数组,什么时候使用begin变量
-
用rand7()实现rand10()
- 1, 拒绝采样
- 2, 进行优化
背包九讲问题
-
有依赖的背包问题:
-
背包问题最优解方案数
- -
-
leetcode上相关的背包问题
-
-
完全背包问题
- 如果是完全背包,即数组中的元素可重复使用并且不考虑元素之间的顺序,arrs放在外循环(保证arrs按顺序),内循环遍历target,且内循环倒序
- 如果组合问题需考虑元素之间的顺序,需将target放在外循环,将arrs放在内循环,且内循环正序
遇到比较的题,考虑能否自定义比较器,如leetcode179题8
基本计算器问题,leetcode224,227
洗牌算法(Fisher-Yates) leetcode 384
滑动窗口的最大值
- 剑指offer59题
约瑟夫环的问题:剑指offer62
循环依赖 leetcode补充题23,leetcode207,210
- 有的面试官要求判断是否有循环依赖,有的则要求给出一个可行的顺序,解决这类问题的利器就是----拓扑排序
- 拓扑排序算法过程:
- 选择图中一个入度为0的点,记录下来
- 在图中删除该点和所有以它为起点的边
- 重复1和2,直到图为空或没有入度为0的点
图的表示法与常用的转化算法
回溯算法 leetcode46,47
kmp算法
- https://www.cnblogs.com/tangzhengyue/p/4315393.html
- https://www.cnblogs.com/jiezai/p/11146865.html
二叉搜索树的三个特性:
- 二叉搜索树的中序遍历的序列是递增排序的序列