大师兄

这些常见算法面试题,你会解了吗?

你好,我是胡光。前几天,我留了几道简单的算法面试题,你解决的怎么样了?今天我来公布一下答案。

1. 请尽可能多地说出二叉排序树与快速排序算法之间的联系。

参考答案:

  1. 二叉排序树是快速排序算法的思维逻辑结构。
  2. 快速排序每一轮选出的基准值,就是二叉排序树当前子树的根节点。
  3. 快排中的 Partition(分区)操作后的左右两个集合,对应了二叉排序树中的左右两个子树。
  4. 分析快速排序的时间复杂度,其实可以对应到建立一棵二叉排序树的时间复杂度。
  5. 二叉排序树上查找第 k 大元素,与快速排序的拓展算法快速选择算法相对应。

2. 请总结出 AVL 树的失衡调整方式。

参考答案:

  1. LL 型失衡,左子树的左子树更高,直接大右旋即可。
  2. LR 型失衡,左子树的右子树更高,先抓着左子树进行小左旋,再大右旋。
  3. RL 型失衡,右子树的左子树更高,先抓着右子树进行小右旋,再大左旋。
  4. RR 型失衡,右子树的右子树更高,直接大左旋即可。

3. 简述红黑树的五条性质。

参考答案:

1.节点非黑即红。
2. 根节点是黑色。
3. 叶子(NIL)节点是黑色。
4. 红色节点下面的两个孩子,一定是黑色节点。
5. 从根节点到所有叶子结点路径上,黑色节点数量相同。


4. 请对比一下二叉排序树和哈希表。

参考答案:

  1. 本质上二者都是做数据的索引查找。
  2. 二叉排序树维护了数据的有序性,哈希表则会破坏这种有序性。
  3. 单纯的查找操作的话,哈希表要比二叉排序树更优秀一些,哈希表的时间复杂度是 $O(1)$ 的,二叉排序树是 $O(logn)$ 的。
  4. 二叉排序树由于维持了数据的有序性,因此在一些需要数据之间这种有序的拓展查找问题上,二叉排序树比哈希表更具备优势。例如:查找第 $k$ 大元素。
  5. 二叉树中的节点是依次添加进去的,所以在扩容方面显得更简单一些。哈希表的扩容操作,通常都比二叉排序树要麻烦一些。

5. 请你说出 4 种生活中需要查找的例子,并且分析需要的查找算法和数据结构。

参考答案:

  1. 在图书馆中,我们需要按照图书的编号到对应的书架上查找图书。这更像是块状链表。
  2. 收费站处,经过车牌识别系统以后,我们需要到资料库中找到对应车辆的具体信息。这的过程我们可以采用哈希表。
  3. 快递小哥在送快递的时候,会根据快递地址找到具体的物理位置,再把快递送出去。地址信息更像是一个树形索引结构。
  4. 期末考试成绩公布了以后,爸爸妈妈会在成绩单上快速查找你的名字。这就是普通的顺序查找。

好了,你可以利用我给出的参考答案和你自己的对照一下,看看有哪方面遗漏了。那这节课就到这里,我是胡光,我们下节课见!