努力学习中
一、基础算法
-
二叉查找——在
的时间内寻找某一个具体值
-
计数排序——这是一种牺牲内存空间来换取低时间复杂度的排序算法,可以达到
时间复杂度
-
快速排序——对冒泡排序的一种改进,可以在最好和平均时间复杂度为
,最坏时间复杂度
-
桶排序——当要被排序的数组内的数值平局分配的时候,桶排序使用线性时间(
)
- 置换环——得到数组排序(可以指定排序方式)所需交换的最小次数
二、线性表
- 并查集——适用于解决一些元素的分组问题
三、栈和队列
四、树
- 二叉搜索树——维护一个有序的数组,搜索前缀、后缀、最大值、最小值
- 平衡二叉搜索树——使每个结点的左右两颗子树的高度差都不超过一
-
线段树——用于维护区间信息,可以实现
的区间修改
- 二叉堆——适用于按大小取数的情况
五、图
- 单源最短路径-Dijkstra——解决正权图的单源最短路径问题
六、字符串
-
字典树——用来存储和查询字符串,利用字符串的公共前缀来减少查询时间,同时可以利用字符串的
'后缀'+'$'+'前缀'形式完成前缀后缀的搜索 -
KMP字符串匹配算法——在
的时间复杂度内在文本串中快速查找模式串
- 最长公共子序列——利用动态规划查找两个字符串的最长公共子序列
-
确定有限状态自动机——求解给定的输入字符串
S是否满足条件P的问题
七、动态规划
- 前缀和——数组的某下标之前的所有数组元素的和,在单位时间内求出单位和
- 线性动态规划——具有线性阶段划分的动态规划算法
- 区间动态规划——一个状态通常由被它包含且比它更小的区间状态转移而来
- 树形动态规划——根据树形结构进行动态规划的算法
八、数学
- 最大公约数和最小公倍数——求解最大公约数和最小公倍数简洁版
- 同余及其性质——数论中的一种等价关系
-
组合数的计算方法——从
个不同元素中取出个
元素的所有组合的个数
九、高频面试题
参考文献: