哈希表的学习

上次刷完LeetCode题目1,看了答案之后懂得流程,但其实对于哈希表的流程还是不是特别明白

所以针对哈希表进行专业学习

哈希表,是根据关键字来创建的一个表格,创建之后就可以遍历了,是很快的一个操作,可以理解为电话簿存储联系人时,每个首字母对应一个关键字,匹配则存往该地址。

当面临一个关键字有多个对应的值的时候,有开放寻址法拉链法来进行解决。没有具体操作之前,认为拉链法会比较好。

开放寻址法,是指如果当前关键字如果已经有对应值,就去该地址的下一个地址去查询,看是否可以存储。我觉得这个若是对于一个数组,存储时,前面重复的关键字会导致占用后面该正在存储的关键字,使得哈希表不能完全是一个哈希表了。就是本来关键字是3 的,但因为关键字是2的过多,占用了3的位置,那么当我们想要找关键字3的值时,就无法直接找到了。

拉链法,是直接将重复关键字的值,构成链表。需要掌握链表的知识。可能会导致存储空间的浪费。比如某个关键字完全没有值对应,那么这片空间一定会被浪费。

哈希函数设置为:hash(key) = key % capacity; capacity为存储元素底层空间总的大小

头文件要包含#include <unordered_map>   #include <unordered_set>用到哪个写哪个

通过unordered_set或者unorder_map来构造哈希表,可以使用begin表示起始位置,end表示末位置(map和set遍历是有序的,unordered系列是无序的)

可能会用到vector添加元素(push_back()和emplace_back())

调用函数时会用到STL库

LeetCode第一题是需要掌握哈希表的使用,而不是从定义要求开始

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值