极客大学算法训练营2020版

大纲

预习 10 周如何攻破算法面试?

  • 数据结构和算法知识总览
  • 面试刷题都有哪些误区?
  • 如何高效学习数据结构和算法?
  • 如何快速高效地分析时间复杂度和空间复杂度?

“工欲善其事,必先利其器”,在开启训练营之前,看看我们要做哪些“热身运动”。

数组、链表、跳表

  • 数组和链表原理讲解
  • 面试热点数据结构跳表剖析
  • 常考面试题目精讲

数组、链表属于线性表结构,所谓线性表,就是数据排成一条线一样的结构。

栈、队列、优先队列、双端队列

  • 栈和队列原理讲解
  • 面试热点优先队列、双端队列剖析
  • 常考面试题目精讲

我们熟知栈是“先入后出”,队列是“先入先出”,那这些数据结构是如何应用的呢?

哈希表、映射、集合

  • 哈希表、映射、集合的原理讲解
  • 哈希表常见实践案例
  • 常考面试题目精讲

在建造哈希表时不仅要设定一个“好”的哈希函数,而且要设定一种处理冲突的方法。

树、二叉树、二叉搜索树

  • 树是如何演进的?
  • 二叉搜索树原理讲解
  • 常考面试题目精讲

从链表到树的发展,你可以发现链表就是特殊化的树,而树又是特殊化的图。

堆、二叉堆和图

  • 堆和二叉堆原理讲解
  • 图的属性和分类
  • 常考面试题目精讲

堆是可以迅速找到一堆数中的最大或者最小值的数据结构。

递归、分治和回溯

  • 递归基础知识及常见变形
  • 递归的高阶形式有哪些?
  • 分治与回溯的原理讲解
  • 常考面试题目精讲

树的面试题解法一般都是递归,熟练使用递归对于培养程序化思维是非常有帮助的。

深度、广度优先搜索

  • 如何用代码实现 BFS、DFS?
  • BFS 和 DFS 有什么区别?
  • 双向 BFS 原理剖析
  • 常考面试题目精讲

给你一个用户,如何找出这个用户所有的一度、二度、三度好友关系呢?

贪心算法与二分查找

  • 贪心算法的原理是什么?
  • 贪心算法有哪些高级应用?
  • 二分查找有哪些高级变形?
  • 常考面试题目精讲

贪心算法与动态规划的不同在于,它对每个子问题的解决方案都能作出选择,并且不能回退。

动态规划

  • 递推、状态的定义、最优子结构和状态转移方程是动态规划最核心的 4 个要素。
  • 动态规划的原理讲解
  • 理解动态规划的关键点是什么?有哪些误区?
  • 解析动态规划不同路径问题、背包问题
  • 初级、中级动态规划题目精讲

并查集、字典树、红黑树和 AVL 树

  • 原理讲解及其基本实现
  • 红黑树和 AVL 性能对比
  • 常考面试题目精讲

AVL 树是一种高度平衡的二叉树,所以查找效率非常高也比较复杂;而红黑树只做到近似平衡,所以维护成本要低一些。

位运算、布隆过滤器和 LRU Cache

  • 有哪些常见的高级位运算操作?
  • 位运算在搜索、分治中的高级应用
  • 布隆过滤器在工业界有哪些应用?
  • 常考面试题目精讲

对于一个很长的二进制向量和一系列随机函数,布隆过滤器可以用于检索一个元素是否在一个集合中。

排序算法

  • 各种常见排序的比较
  • 各种排序算法的模版是什么?
  • 高级排序常考面试题精讲

大部分编程语言都提供了排序函数,在平时项目中也经常会遇到排序,因此需要了解它们之间的区别。

字符串算法

  • 常见的高级字符串算法有哪些?
  • 什么是字符串匹配算法?
  • 常考面试题目精讲 > 有一个字符串 “BBC ABCDAB ABCDABCDABDE”,如何知道里面是否包含另一个字符串 “ABCDABD” 呢?