- 结构
- 字典树
- 内向基环树
- dfs和bfs
- 栈和队列:说明,简单的使用数组实现
- 单调栈和单调队列
- 滑动窗口和双指针
- 排序算法
- 线段树
- 树状数组
- 前缀和和差分数组
- 链表:快慢指针
- 分组循环
- 位运算优化
- 博弈论
- 数学
- 获取包括数组某个树在内且该数作为最小值的连续子数组总数 Leetcode 828. 统计子串中的唯一字符
- 裴蜀定理6329题
- 树
- 图论
- 最大流问题/最小费用网络流问题/二分图问题
- 方法:
- 递归分治
- 模拟退火
- 贪心
- 回溯
- 模拟
- 数位dp
- 图的操作:图的求最短路和最小生成树经典算法及相关优化(prim算法等,dijkstra可用优先队列优化,Bella-Ford在一定情况下可转为spfa代替) Leetcode 1334. 阈值距离内邻居最少的城市,最短路径问题补充,图的表示方法
- 常用操作及相关优化
- 字符串遍历java优化, 字符串修改(使用string.toCharArray进行原地修改之后使用构造函数,使用StringBuilder修改,不拼接使用第一种就好,其他语言无第二种方案,c++可直接修改string,其他语言转为char数组后重新拼接)
- 环形数组的遍历方法:遍历两轮即2n个元素,在第二轮遍历(i > n)时进行统计;如果是滑动固定窗口长度k,可以从-k+1个元素开始遍历到n,进行统计;如果是离散节点,那么i=n不是结束条件,i>=0且为截断点时才结束,截断点应该在开始时就被统计,是第一个被统计的截断点,也就是说对结尾特殊处理,比如如果是求段长度,结尾长度为mod,next为第一个截断点
- 对数组复制操作使用api效果更好
- 自定义排序方法
- 获得比一个正数大一点的第一个的值
- x&(-x)获取二进制最低位
- x&=x-1消去二进制最低位
- 其他位运算

- 判断是否为素数质数判断
- 求最大公约数
- Gosper_Hack得到其k个比特位为1的所有排列组合
- 参考:
- 神经网络:ShusenWang和d2l
- 大部分算法源码:williamfiset
- 题目:
- 1631. 最小体力消耗路径,二分, 并查集, 最短路径
- 2454. 下一个更大元素 IV,单调栈, 排序后有序集合
- 2809. 使数组和小于等于 x 的最少时间,动态规划
- 2861. 最大合金数
- 2831. 找出最长等值子数组,滑动窗口
- 2786. 访问数组中的位置使分数最大,动态规划
- 2779. 数组的最大美丽值
- 3133. 数组最后一个元素的最小值,位运算
- 698. 划分为k个相等的子集,动态规划, 模拟退火
- 3176. 求出最长好子序列 I,动态规划
- 2552. 统计上升四元组,枚举
- 2555. 两个线段获得的最多奖品,二分查找,双指针枚举+动态规划
- 2376. 统计特殊整数,动态规划
- 1928. 规定时间内到达终点的最小花费,动态规划,图
- 3243. 新增道路查询后的最短距离 I,DFS,动态规划
2024/10/3大约 4 分钟
