# 算法专题

以下是一些我总结的类型题目，提前搞懂这些东西对之后的做题很有帮助，强烈建议先掌握。另外我的 91 天学算法也对专题进行了更细粒度的整理，具体参见[91 天学算法](../91/README.md)

首先基础的数据结构大家是必须掌握的，其次就是暴力法。暴力法也是算法，只不过我们追求的肯定是性能更好的算法。因此了解暴力法的算法瓶颈以及各种数据结构的特点就很重要， 这样你就可以根据这些知识去一步步逼近最优解。

再之后就是必须掌握的算法。比如搜索算法是必须掌握的，搜索算法的范围很广，但是核心就是搜索的，不同的算法在于搜索的方式不同，典型的就是 BFS 和 DFS，当然二分法本质上也是一种搜索算法。

还有就是暴力优化法也是必须掌握的，和搜索一样，范围很广。 有剪枝， 空间换时间等。 其中空间换时间又有很多，比如哈希表， 前缀树等等。

围绕这个思想去学习， 就不会差太多，其他我就不多说，大家慢慢体会。

- [数据结构](basic-data-structure.md)
- [二叉树的遍历](binary-tree-traversal.md)
- [动态规划](dynamic-programming.md)
- [哈夫曼编码和游程编码](run-length-encode-and-huffman-encode.md)
- [布隆过滤器](bloom-filter.md)
- [字符串问题](string-problems.md)
- [前缀树](trie.md)
- [贪婪策略](greedy.md)
- [回溯](backtrack.md)
- [深度优先遍历](DFS.md)
- [滑动窗口（思路 + 模板）](slide-window.md)
- [位运算](bit.md)
- [设计题](design.md)
- [小岛问题](island.md)
- [最大公约数](GCD.md)
- [并查集](union-find.md)
- [前缀和](prefix.md)
- [平衡二叉树专题](balanced-tree.md)
