哈希表的算法

本文介绍了哈希表如何通过数组、set和map在算法题中提高效率,如判断元素是否存在、计算字母异位词、寻找两个数组的交集等。重点强调了使用这些数据结构时的关键思想和应用场景。
摘要由CSDN通过智能技术生成

哈希表基本上用这三个数据结构:

  • 数组
  • set
  • map

当我们要判断某个元素是否在集合中出现的时候用哈希表来提高效率


1.数组类型
242. 有效的字母异位词 - 力扣(LeetCode) 这就是用了数组来记录出现次数,用哈希的思想映射过去,其中hash[s[i]-'a']++;把字母映射到了数组的索引上去

所以说数组的索引标不仅仅用来for的遍历,用哈希法则把数组的索引和数值联系起来


2.set类型

如果他题目本来就告诉你了一个范围大小,那么可以用数组,如果没告诉你可能无穷大那么用set这个数据结构

哈希表就是用来给你一个元素判断一下这个元素是否出现过

set类型的数据结构就像是vector向量一样 可以不断的增添(没有大小限制),

并且unorder_set是自动去重的(这点很特殊)

map不会自动去重的

349. 两个数组的交集 - 力扣(LeetCode)


3.map类型

每一次找都要记录前面的一个,比如我现在已经记录了2当我到7的时候我要拿7和我已经存储的2来进行条件判断

就是当我到了4的时候我此时的目的就是找以前我是否记录了2 所以要不断的记录经过的值

我们不仅要知道值,而且还要知道下标,所以这时候就用map的 key 和 value

map作用:存放我们已经遍历过的元素

根本转化为还是找一个元素是否出现过

1.这里的iter起到了相当于容器的作用(定位元素)map这里不像是数组可以通过下标来访问它,那么我们就把他拿出来,放到一个容器里暂时存放他,便于对他操作

2.我们在条件里不用==0而是用!=  map.end()因为我们调用的是find函数  他找不到就继续找,这里就是这样搭配的

3.用容器的iter->second来访问value(下标)

4.插入的时候要用pair捆帮起来

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值