基于 《Essential C++》 梳理 C++ 核心知识。
- 位运算符的妙用;
- 基本排序方法:选择排序、冒泡排序、插入排序;
- 使用对数器对算法进行测试和检验;
- 使用 C11 风格生成随机数。
- 递归**与用主方法估计复杂度;
- 归并排序以及基于归并排序的小和问题、逆序问题;
- 双指针和三指针的荷兰国旗问题以及引申出来的快速排序。
- 堆排序;
- 用堆解决部分排序问题;
- 利用优先队列内部是一个堆的特性来解决问题;
- 桶排序;
- 排序方法梳理与总结。
- 有序表和无序表;
- 单链表和双向链表的基本操作(创建、删除、增删改查节点);
- 单链表的中等题:回文链表、区间划分、拷贝含有随机指针的链表;
- 单链表的难题:判断两个可能有环的链表是否相交。
- 二叉树的创建、数节点个数等基本操作;
- 二叉树的递归**以及先序遍历、中序遍历、后续遍历的递归/非递归实现;
- 二叉树的 BFS 以及最大宽度;
- 二叉树的递归框架:判断给定二叉树是否为搜索、满、完全、平衡二叉树等;
- 找最低公共祖先节点;
- 找后继节点;
- 二叉树的序列化和反序列化。
- 实现适配器,将各种表示的图转换为最好写代码的图的数据结构;
- 图上的 BFS 和 DFS;
- 有向无环图的拓扑排序;
- 最小生成树的 K 算法 和 P 算法(并查集等 API 的自主实现);
- Dijkstra 算法求最短路径和。
- 前缀树的实现和使用;
- 贪心策略的设计(四道例题);
- n 皇后问题等 8 道题目(暴力递归/回溯)。
- 基于哈希函数和位图的一系列应用;
- 理解布隆过滤器的使用;
- 理解一致性哈希。
- 01 岛问题的并行算法设计(并查集结构);
- MKP 算法;
- Manacher 算法;
- 滑动窗口与双端队列;
- 单调栈。
- 树型动态规划框架;
- Morris 遍历及其应用(前序、中序、后序遍历以及判定是否为 BST 等)。
- 动态规划问题的分析步骤(三步走策略)。
- 二叉搜索树的基本操作(尤其是删除节点的实现);
- 平衡二叉搜索树的实现(AVL 树、SB 树、红黑树);
- 跳表。
- 滑动窗口、打表找规律、预处理数组;
- 括号问题;
- 基于业务分析的题;
- 矩阵的各种花式打印;
- 基于已知的数据结构实现另外的数据结构;
- 动态规划的空间压缩技巧;
- 落水问题与双指针;
- 动态规划确定表范围;
- 更多跟业务分析相关的题;
- 严格递归问题的矩阵求法;
- 前缀树的应用;
- 更多树型 DP 题目;
- 统计给定字符串中不重复子序列的个数。