logo
Algorithms study cheatsheets

Coding interview 的数据结构与算法学习 cheatsheets

面向 coding interview 的学习指南,聚焦数据结构与算法,含练习题、技巧、时间复杂度与推荐资源

这是什么

本部分深入讲解在 algorithm interviews 中高频出现的数据结构与算法的实用知识与技巧。你的工具箱越丰富,通过面试的概率越高。这些技巧还能帮你发现容易忽略的 corner cases,甚至引导你找到最优解。

每个学习指南包含什么

每个 topic 里通常会包含:

  1. 简短概览
  2. 学习资源
  3. 语言相关的常用库
  4. 时间复杂度 cheatsheet
  5. 面试中需要注意的点
  6. Corner cases
  7. 实用技巧 + 推荐练习题

学习指南列表

以下是 coding interview 常见数据结构/算法及对应学习指南:

通用面试技巧

澄清你下意识的假设。很多题目是故意不写完整的。

先验证输入。检查 invalid/empty/negative/不同类型的输入。不要默认输入一定合法。也可以直接问面试官能否假设输入合法(通常可以),以节省写校验的时间。

是否有 time/space complexity 的要求或限制?

注意 off-by-one 错误。

在没有自动类型转换的语言里,拼接时要确认类型一致:int/str/list

写完代码后,用几个示例 input 测试你的解法。

算法是否会被多次调用(例如 web server 场景)?如果是,输入可能可以预处理以提升每次调用效率。

在函数式与命令式之间取得平衡:

  • 尽量写 pure functions。
  • Pure functions 更易推理,也更少 bug。
  • 避免修改函数参数(尤其是引用传递),除非你非常确定。
  • 但函数式通常更耗空间(因为不修改对象、不断分配新对象)。命令式更快,因为直接操作已有对象。需要在正确性与效率间找到平衡。
  • 避免依赖或修改全局变量。全局变量引入状态。
  • 如果必须用全局变量,确保不要意外修改。

要提升程序速度,通常有两种方式:(1) 选择更合适的数据结构/算法;(2) 用更多内存。后者是经典的 space vs time tradeoff,但并非总是以空间换速度。有时存在理论上限,无法再更快。例如在无序数组找最小值,复杂度不可能快于 O(N)。

数据结构是你的武器。选对武器才能赢。熟悉每种数据结构的优势与各操作的复杂度。

数据结构也可以组合增强。例如 hash map + doubly-linked list 可在 LRU cache 中实现 getput 都是 O(1)。

Hash table 是算法题最常见的数据结构。如果你卡住了,可以列举常见数据结构并逐个思考是否可用。这一招有时很有效。

如果你在代码里“偷懒”,记得当场讲清楚,并说明非面试场景会怎么做。例如:“我会用 regex 解析这个字符串,而不是 split(),因为 split() 可能覆盖不了所有情况。”

推荐课程

相关练习题

Coding interview 的数据结构与算法学习 cheatsheets

暂无相关练习题