logo
Algorithms study cheatsheets

Coding interview 的 Hash table cheatsheet

Hash table 学习指南,包含练习题、技巧、时间复杂度与推荐资源

Introduction

Hash table(也叫 hash map)是一种实现 associative array 的数据结构,用来把 key 映射到 value。Hash table 会对 key 做 hash,得到一个 index(hash code),用于定位 bucket/slot,从而找到对应 value。查找时对 key 做 hash,就能直接定位到存储位置。

Hashing 是经典的 space-time tradeoff。与每次 O(n) 线性查找相比,我们可以先遍历一次,把元素哈希进 hash table。之后查找元素是否存在,只需 hash 一下并查表,平均 O(1)。

Hash 冲突时有多种处理方式。面试一般不会考太细:

  • Separate chaining - 每个 bucket 里用 linked list 存储冲突项
  • Open addressing - 所有 entry 都放在 bucket array 内,通过 probing 找空位

Learning resources

Implementations

LanguageAPI
C++std::unordered_map
Javajava.util.Map. Use java.util.HashMap
Pythondict
JavaScriptObject or Map

Time complexity

OperationBig-ONote
AccessN/A无法直接 access,因为 hash code 不可预测
SearchO(1)*
InsertO(1)*
RemoveO(1)*

* 这里是平均情况,面试里通常只关心 hash table 的平均复杂度。

Sample questions

  • 描述一个 least-used cache 的实现,以及其 big-O
  • 关于 API 集成 hash map,bucket 由 linked list 组成的问题

Essential questions

该 topic 必练题。

在掌握基础后推荐练习。

检测你的掌握度

3
1/3

Q1. Hash Table 查找操作的平均时间复杂度是?

相关练习题

Coding interview 的 Hash table cheatsheet

暂无相关练习题