本人自学算法一段时间了,将自己所学进行了整理,后续还会更新,希望对大家有帮助。
目录
哈希
哈希用来查找的时间复杂度为O(1),这在很多地方都可以用到
1.两数之和,https://leetcode.cn/problems/two-sum/
2.四平方和,网址后续补充
3.笨手指,网址后续补充
双指针
双指针通常用来找子段,通常会将O(n^2)降低至O(n)
1.无重复字符的最长子串,https://leetcode.cn/problems/longest-substring-without-repeating-characters/
二分
二分通常用来查找某个值,时间复杂度为O(logn)
字符串类
2.manacher,网址后续补充
DFS
深度优先,通常用来暴力
1.迷宫,网址后续补充
2.不同路径数,网址后续补充
动态规划:
动态规划,记忆化,对dfs剪枝
背包
1.01背包,网址后续补充
2.完全背包,网址后续补充
3.多重背包,网址后续补充
4.分组背包,网址后续补充
线性
1.最长上升子序列,网址后续补充
2.最长公共子序列,网址后续补充
3.最长公共上升子序列,网址后续补充
4.最长不下降子序列,网址后续补充https://blog.youkuaiyun.com/qq_55364042/article/details/124614772?spm=1001.2014.3001.5501
区间
1.涂色,网址后续补充
2.石子合并,网址后续补充
树形
BFS
广度优先在求最短距离时很有优势
1.迷宫求最短路径
图论类
拓扑排序
求一个无向图有无闭环
1.拓扑排序,网址后续补充
并查集
通常求两点之间有无连通性
1.亲戚,网址后续补充
2.网络分析.网址后续补充
3.异或和.网址后续补充
dijkstra
对于无负权的图,求距原点最短路径
Spfa
对有负权的图,求距原点最短路径
单调栈
确实很多地方用到,通常会将一些遍历的时间复杂度降至O(n)
1.最大子序和,网址后续补充
前缀
前缀和可O(1)的求某范围的和
1.求某一段的和,网址后续补充
2.统计子矩阵,网址后续补充
3.k倍区间
差分
差分是前缀和的逆处理
1.增减序列,网址后续补充
树类
二叉树
红黑树
查找树(Trie)
线段树
博弈论
1,纸牌博弈,网址后续补充
2.取石子游戏,网址后续补充