1. 概览
Last updated
Last updated
这部分是重中之重,必须学扎实,在平时也会用到。
数据结构
四种最基本的一维容器:数组+链表、栈+队列。必须熟练掌握
Hash 表:熟练应用、掌握基本的建立方法
四种基本的树形结构:二叉堆、二叉搜索树、字典树、并查集。要熟练掌握,它们的应用非常广泛,在库/框架里很常用,而且都不难写
树和图:重点。链表是特殊的树,树是特殊的图,树和递归也有着密切关系
DFS 和 BFS:重点。搜索是解决一切问题的万金油算法
字符串:重点。平时应用的最多
这部分更进阶一些,是有决策地整理和理解,会考虑整个状态空间。
递归:子问题是不同规模如何处理
分治
动态规划:子问题是当前阶段如何决策
贪心
不论是递归还是动规,都考虑的是本层逻辑。递归要想的是本层逻辑,而不要往太深的地方想。要把子问题看作是一个写好的函数,去直接调用;然后在本层考虑怎样把问题的规模进一步缩小,只要一缩小,子问题就会遇到边界,然后就能层层返回。动规是分阶段的,考虑“当前阶段”这个子问题,然后通过不同决策再变到之后的一个问题,直到目标阶段。
这部分属于优化类。候选集合优化是提高效率的关键,本质是去除冗余。前缀和+二分答案是重点,都比较好写,且代码也不难
双指针
滑动窗
前缀和:属于预处理,用空间换时间。
二分答案:是把一个最优解问题变成判定问题,因为验证要比求解简单些
高端技巧
最短路、最小生成树:图论算法,一般 Hard 题较多
离线批处理、关键事件思想