代码随想录算法训练营二刷第19天 | 哈希表——set完结、部分map

set作为哈希表

202.快乐数

快乐数是重复 将一个正整数的每个位置上的数字的平方和替换为它自身,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

在这个重复替换的过程中,如何判断这个数进入了无限循环呢?也就是说:进入无限循环以后,某个数会重复出现,因此,要判断是否会出现无限循环,也就是要判断在这个替换的过程中某个数 是否会重复出现,因此必要用到哈希表

同时这道题考察了如何求出一个整数的每个位上的值!这属于C++基础-查漏补缺中的内容!

map作为哈希表

1.两数之和

题目要求:在给定一个整数数组 nums 中找到 相加等于目标值 target的那 两个 整数,并返回它们的数组下标。

本题其实就是:查询在一个数组中是否出现了另一个与当前遍历的元素匹配的元素,如果出现了,则返回其下标。因此,这就涉及到了哈希表!

遍历,查询哈希表中是否出现过target-nums[i],若未出现,则将当前数值存放到哈希表中,由于返回的是下标值,因此将target-nums[i]作为key值,下标值作为value值,最后返回即可!

(~)454.四数相加Ⅱ

题目给定4个长度均为n的整数数组,在每个数组中各选一个元素,使得四数相加等于0。

本题的暴力解法为n^4,并非最优的。

这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况。

本题为什么会想到哈希表法呢?首先是因为A[i] + B[j] + C[k] + D[l] = 0具有一定的匹配关系,并且不需要考虑去重的问题,要在一个数组B中找到与另一个数组A有关的元素,就涉及到了哈希表。本题与有效的字母异位词或者 两个数组的交集是跟相似的,都是要寻找两个不同的字符串/数组直接具有匹配关系的元素/个数

本题解题步骤:

  1. 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value,也就是出现次数统计出来。
  5. 最后返回统计值 count 就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值