【力扣专题】3.哈希表

理论知识

一般哈希表都是用来快速判断一个元素是否出现集合里,要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。
● 哈希碰撞:映射到了同一个索引
● 拉链法:索引存链表头节点,发生冲突的元素都被存储在链表中
● 线性探测法:使用线性探测法,一定要保证tableSize大于dataSize
C++的set和map:
set:

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

std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。

map:

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

数组代替哈希表

常常是在哈希表的tablesize已经被确定的时候使用,因为开数组时需要声明数组大小
1002. 查找共用字符

set

使用了unordered_set来判断一个数是否重复出现过。
202.快乐数

map

出现次数
1.两数之和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值