摘自极客时间「数据结构与算法之美」专栏
必须要掌握的:
复杂度分析(M 10分)
在平时的工作或者学习时,需要主动有意识的去分析每个算法的时间复杂度和空间复杂度。
掌握程度:能够自行分析专栏中大部分数据结构和算法的时间、空间复杂度。
数组、栈和队列(E 8分)
这三个是基本的数据结构,是后续更复杂度数据结构和算法的基础。
掌握程度:能够自己写代码实现动态数组、栈、队列。
链表(M 9分)
面试常考,不仅能够看懂专栏内容,还需要能够将专栏中提到的经典算法,如:链表反转、求中间节点等,轻松无 bug 的实现。
掌握程度:能够轻松写出经典的链表算法题。
递归(H 10分)
在计算机中非常重要的算法思想,作者说不会递归就不能算入门了数据结构和算法。最主要的方法是多练。可以先从简单的斐波那契数列、求阶乘等,再过渡到归并排序、二叉树遍历、求高度,最后是回溯八皇后、背包问题等。
掌握程度:轻松写出二叉树遍历、八皇后、背包问题、DFS 的递归代码。
排序、二分查找(E 7分)
掌握程度:能够自己实现各种排序算法、二分查找法及其变体代码。
散列表(M 8分)
是一种应用非常广泛的数据结构,需要牢固掌握。
掌握程度:对于初学者,能够自己实现一个拉链法解决冲突的散列表即可。
二叉树(M 9分)
非常重要的一种数据结构,面试经常会考。暂时不包括红黑树。
掌握程度:能够代码实现二叉树的前、中、后序遍历,按层遍历,求高度等景点的二叉树题目。
堆与堆排序(M 8分)
掌握程度:能实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top K、中位数)
图的表示(E 8分)
内容比较多,但是面试基本上不会考。但是,还是需要掌握基本的图的概念、表示方法。
掌握程度:理解图的三种表示方法(邻接矩阵、邻接表、逆邻接表),能够自己代码实现。
深度广度优先搜索(H 8分)
基于图的最基本的搜索算法,一个用到了队列,另一个用到了递归。可以最后再来挑战。
掌握程度:能代码实现广度、深度优先搜索算法。
字符串匹配(RF、RK)(E 7分)
BF 非常简单,RK 稍微复杂点。
掌握程度:能实践 RF 算法,能看懂 RK 算法。
字符串匹配(Tire 树)(M 7分)
这个只需要能看懂,不要求代码实现。有些面试官喜欢考,主要是结合场景来考察,主要是看你知不知道实现 Tire 树这个东西。
掌握程度:能看懂,知道特点、应用场景即可,不要求代码实现。
四种算法思想(H 10分)
这个是重点,也是难点。贪心、分治、回溯、动态规划每一个都不简单。应付 FLAG 这样的公司的面试,必须要拿下这一块。但是这些内容可以放到最后,做一个长时间的学习计划来攻克。
掌握程度:可以放到最后,但是一定要掌握!做到能够实现 LeetCode 上面 Medium 的题目。
中级进阶
跳表(M 6分)
掌握程度:初学者可以跳过。感兴趣的话,能够看懂专栏内容,不要求掌握代码实现。
B+ 树(M 5分)
比较高级点的数据结构。面试可能会问,所以只需要看懂专栏的讲解即可。
掌握程度:可看可不看。
拓扑排序、最短路径、A*算法(H 5分)
稍微高级点的算法,能够轻松实现广度、深度优先搜索,看懂这三个算法并不难。但是面试基本不会考。
掌握程度:有时间和精力再学习
位图(E 6分)
位图不是重点,如果有余力最好掌握一下。
掌握程度:能看懂即可,能够自己实现一个位图结构最好。
高阶进阶
字符串匹配(BM、KMP、AC 自动机)(H 3分)
掌握程度:这三个算法非常难,对于初学者千万不要浪费时间在这个上面。
哈希算法(E 3分)
纯粹为了开阔思路
掌握程度:可以暂时不看
红黑树(H 3分)
掌握程度:初学者不用把时间浪费在上面
高级篇、实战篇的其他内容(H 3分)
掌握程度:可以暂时不看
