算法练习Day5 | Hash Table

67 阅读1分钟

Hash Table

文章链接:
programmercarl.com/%E5%93%88%E…

注意点

  • 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
  • 哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
  • 遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!

map

映射底层实现是否有序数值是否可以重复能否更改数值查询效率增删效率
std::map红黑树key有序key不可重复key不可修改O(logn)O(logn)
std::multimap红黑树key有序key可重复key不可修改O(log n)O(log n)
std::unordered_map哈希表key无序key不可重复key不可修改O(1)O(1)

set

集合底层实现是否有序数值是否可以重复能否更改数值查询效率增删效率
std::set红黑树有序O(log n)O(log n)
std::multiset红黑树有序O(logn)O(logn)
std::unordered_set哈希表无序O(1)O(1)

题目

  • 242.有效的字母异位词
  • 349.两个数组的交集
  • 202.快乐数
  • 1.两数之和

242.有效的字母异位词

  • 不能用unordered_set
  • 一开始比较字符串长度可以快一点

349.两个数组的交集

  • 用unordered_map, 使用合适的key和value类型, 可以节省空间

202.快乐数

  • 花了点时间看题目
  • 两种情况, 变为1或者会陷入循环

1.两数之和

  • 一开始用了两个循环来做
  • 其实一个循环就够了, 因为不能自身加自身