哈希表总结

哈希表

用于快速判断一个元素是否出现在集合中。

哈希函数

哈希碰撞:拉链法,线性探测法

常见的哈希结构:

  • 数组
  • set(key)
  • map(key,value)

底层实现:

set/map :红黑树,key有序,数值不可重复,不可修改,查询效率O(logn),增删(Ologn)

multiset/multimap:红黑树,key有序,数值可重复,O(nlogn),O(nlogn)

unordered_set/unordered_map:哈希表,key无序,数值不可重复,O(1),O(1)

经典题目

  • 数组作为哈希表
    受数组大小的限制,数组是简单的哈希表,常用于字符串(只有26个字母)中,将字符映射为数字,然后存储于数组中
    常见的题目:
    • Leetcode 242 有效的字母异位同
    • Leetcode 1002 查找常用字符
    • Leetcode 383 赎金信
  • set作为哈希表
    当数据是没有限制的数值时,就不适合用数组了,这样会浪费大量的空间
    这时可以考虑使用unordered_set
    常见的题目:
    • Leetcode 202 .快乐数
    • Leetcode 349.两个数组的交集
    • Leetcode 128.最长连续序列
  • map作为哈希表
    set是一个集合,里面只能放一个元素Key,但是在某些情况下不仅需要放key,还需要放其对应的value,因此这时候可以考虑用map
    常见的题目:
    • Leetcode 1 两数之和
      三数之和,四数之和用双指针的解法!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值