哈希表相关习题

2006. 差的绝对值为 K 的数对数目

2006.差的绝对值为k的输对数目

问题

给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。

思路

创建一个哈希数组,储存已经出现了的数,这里我们枚举的是j,出现过的都是比j小的
满足的数为*ite + k         如果*ite >= k 则还有*ite - k
按顺序枚举数组,加上hash表中对应的满足的数的下标,然后把自己这个数加入到哈希表里

1347. 制造字母异位词的最小步骤数

1347.制造字母异位词的最小步骤数

问题

给你两个长度相等的字符串 s 和 t。每一个步骤中,你可以选择将 t 中的 任一字符 替换为 另一个字符。
返回使 t 成为 s 的字母异位词的最小步骤数。
字母异位词 指字母相同,但排列不同(也可能相同)的字符串。

思路

同时遍历两个字符串,记录每一个字母出现的值
再次遍历两个哈希表,记录s比t多的数量,t比s多的数量,比较两个数量,大的为答案。


面试题 10.02. 变位词组

面试题10.02. 变为词组

问题


编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

思路

设置一个哈希函数,一个字母对应一个素数,根据整数唯一分解定理,两个相同字母的字符窜的对应素数乘积一定是相同的且唯一
计算出每个字符串的key值,定义结果体,根据key值排序,相同的key值(即字母相同的字符串)一定会被排到一起
注意计算key值时,数据越界,应当对一个较大的数字取模。

442.数组中重复的数据 

442. 数组中重复的数据

问题

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

思路

可以轻易想到是一个哈希表的相关问题,哈希表记录数量,但是题中说用o1的额外空间,所以常规哈希表不行。

因为题中给出范围是1到n,并且每个数只可能出现一次或者两次,因为这两个条件,我们可以把题中给的数组当做哈希表来使用,正负号标记

对于一个数,如果以他为下标的位置是正数,说明他是第一次出现,标记为负。

                      如果以他为下标的位置是负数,说明他出现过一次了,算上这次是第二次,加入到数组当中。

注意,把数字当做下标时,每一次都要用他的绝对值,避免出现访问负数,还需要减一,因为nums数组是[0,n-1],数字范围是[1,n],避免越界

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值