1. 概览

1. 高频

1.1 计算机基础

这部分是重中之重,必须学扎实,在平时也会用到。

  1. 数据结构

    1. 四种最基本的一维容器:数组+链表、栈+队列。必须熟练掌握

    2. Hash 表:熟练应用、掌握基本的建立方法

    3. 四种基本的树形结构:二叉堆、二叉搜索树、字典树、并查集。要熟练掌握,它们的应用非常广泛,在库/框架里很常用,而且都不难写

  2. 树和图:重点。链表是特殊的树,树是特殊的图,树和递归也有着密切关系

  3. DFS 和 BFS:重点。搜索是解决一切问题的万金油算法

  4. 字符串:重点。平时应用的最多

1.2 子问题划分

这部分更进阶一些,是有决策地整理和理解,会考虑整个状态空间。

  1. 递归:子问题是不同规模如何处理

  2. 分治

  3. 动态规划:子问题是当前阶段如何决策

  4. 贪心

不论是递归还是动规,都考虑的是本层逻辑。递归要想的是本层逻辑,而不要往太深的地方想。要把子问题看作是一个写好的函数,去直接调用;然后在本层考虑怎样把问题的规模进一步缩小,只要一缩小,子问题就会遇到边界,然后就能层层返回。动规是分阶段的,考虑“当前阶段”这个子问题,然后通过不同决策再变到之后的一个问题,直到目标阶段。

1.3 基本技巧

这部分属于优化类。候选集合优化是提高效率的关键,本质是去除冗余。前缀和+二分答案是重点,都比较好写,且代码也不难

  1. 双指针

  2. 滑动窗

  3. 前缀和:属于预处理,用空间换时间。

  4. 二分答案:是把一个最优解问题变成判定问题,因为验证要比求解简单些

2. 相对低频

高端技巧

  1. 最短路、最小生成树:图论算法,一般 Hard 题较多

  2. 离线批处理、关键事件思想

Last updated