前言
对目前了解的一些数据结构和算法进行整体总结,其中还有很多没有了解的知识。
要补的坑:
计数,滚动哈希,扫描线,红黑树(左旋右旋问题),B树和变种。
高级数据结构:树状数组,线段树,字典树,并查集,后缀数组。
动态规划:状态压缩,树形dp,dp公式的推导等。
一、理论
二、实践
根据代码随想录进行的总结,建议多刷几遍,太牛了,每刷一遍都有新的感悟。
(1)基础题型
需要加强的方面:KMP算法,单调栈和单调队列,优先级队列
感觉比较重要的:环形链表,TopK问题
(2)递归和回溯
必须掌握:前序遍历,中序遍历,后序遍历,层序遍历
递归三部曲和回溯三部曲感觉十分相似,主要是单层逻辑的区别:二叉树还是多叉树,是否需要for循环遍历。
(3)贪心
贪心的话可能考虑左右遍历,覆盖问题和区间问题。
(4)动态规划
动态规划:01背包,完全背包,股票问题,打家劫舍,子序列
重点在于:
- 循环顺序:先物品再背包?先背包再物品?
- dp数组:一维数组还是二维数组?
- 01背包和完全背包:外循环物品,内循环背包是否倒序遍历?
- 组合和排列:组合先物品再背包,排列先背包再物品
基础和背包问题:
股票问题,打家劫舍,子序列,这些dp就开始复杂了起来:
(5)单调栈
单调栈主要用递增还是递减序列解决问题:
目前:
- 从栈头到栈尾递增:可以用于查找下一个更大元素,求接雨水去计算高度和宽度
- 从栈头到栈尾递减:可以计算柱状矩形的最大面积
大概就是这么多了,部分题型还是不太熟悉,树的进阶题和动态规划的很多常见题还是不熟悉,后续补坑。。。