哈希表_总结

Last renew: June 3, 2022 pm

哈希表(Hash Table)

什么是哈希表

哈希表是根据关键码的值而直接进行访问的数据结构。

简单来讲,数组就是一种哈希表。哈希表中关键码就是数组的索引下标,通过下标直接访问数组中的元素。

哈希表一般用于解决什么问题?

用来快速判断一个元素是否出现在集合里。O(1)就可以做到,无需遍历。但需要额外空间。

常见的三种哈希结构

当我们想用哈希法解决问题的时候,一般会选择如下三种关系结构。

  • 数组
  • set 集合
  • map 映射

set只能储存一种值,但map可以储存一个<key, value>的键值对

哈希表经典题目

数组作为哈希表

242, 383

一些应用场景就是为数组量身定做的,比如要求只有小写字母。

虽然这两道题用Map也可以解决,但map消耗空间更大。

Set作为哈希表

349, 202

当数组大小没有被限制的时候,就无法使用数组做哈希表了。

主要原因有如下两点:

  • 数组的大小受限,受到系统栈空间的限制
  • 如果数组空间足够大,但哈希值比较少,比较分散,跨度非常大,使用数组会造成空间的极大浪费。

Map作为哈希表

1, 454, 18, 15

使用数组和哈希set也有自身的局限。

  • 数组的大小受限值,如果元素很少,而哈希值太大会造成内存空间的浪费。
  • Set是一个集合,里面放的元素只能是一个key。而两数之和不仅要判断y是否存在,还要记录y的下标并返回,所以无法用set。

map是一种<key, value>的结构,本题可以用key保存数值,并用value来保存数值所在的下标。

但面对三数之和,四数之和的时候,虽然哈希表依旧可以解决,但非常麻烦,代码效率很低。

所以在18, 15两道题中推荐使用双指针。

刷题清单+题解