《五月集训》第七天——哈希表
目录
—、第一题
1. 原题链接
原题链接:1512. 好数对的数目
给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
2. 解题思路
建立hash在计数的同时,去查找相同值,根据相同值的数量进行累加,最后返回。
3. 代码
int numIdenticalPairs(int* nums, int numsSize){ int hash[101] = {0}; int flag = 0; for(int i = 0; i < numsSize; ++i){++hash[nums[i]];flag += hash[nums[i]]-1; } return flag;}
二、第二题
1. 原题链接
原题链接:2006. 差的绝对值为 K 的数对数目
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。
2. 解题思路
1.哈希+滑动窗口,建立哈希计数,通过滑动窗口的左右值的数量,得到差值数量。
2.哈希,判断当前值+k有无此值或-k有无此值,进行计数。
3. 代码
哈希 + 滑动窗口 如下:
int countKDifference(int* nums, int numsSize, int k){ int hash[101] = {0}; int i; int flag = 0 , max = 0, min = 101;for(i = 0; i < numsSize; ++i){ ++hash[nums[i]]; if(max < nums[i]) max = nums[i]; if(min > nums[i]) min = nums[i];}for(i = k+min ; i <= max; ++i){ flag += hash[i] * hash[i-k];} return flag; }
哈希 如下:
int countKDifference(int* nums, int numsSize, int k){ int hash[101] = {0}; int i, dif; int flag = 0;for(i = 0; i < numsSize; ++i){ dif = nums[i] + k; if(dif >= 1 && dif <= 100) flag += hash[dif]; dif = nums[i] - k; if(dif >= 1 && dif <= 100) flag += hash[dif]; ++hash[nums[i]];} return flag; }
三、第三题
1. 原题链接
原题链接:1347. 制造字母异位词的最小步骤数
给你两个长度相等的字符串 s 和 t。每一个步骤中,你可以选择将 t 中的 任一字符 替换为 另一个字符。
返回使 t 成为 s 的字母异位词的最小步骤数。
字母异位词 指字母相同,但排列不同(也可能相同)的字符串。
2. 解题思路
建立字符串s
和t
的两个hash
,并遍历字符串计数。然后两个hash同时遍历,当hasht
的值大于hashs
时表示t[i]
字符需要更换hasht[i] - hashs[i]
个,直至循环完毕返回。
3. 代码
int minSteps(char * s, char * t){ int hashs[26] = {0}; int hasht[26] = {0}; int i; int ret = 0; for(i = 0; s[i] != '\0'; ++i){++hashs[s[i]-'a'];++hasht[t[i]-'a']; } for(i = 0; i < 26; ++i){if(hashs[i] < hasht[i]) ret += hasht[i] - hashs[i]; } return ret;}
四、星球推荐
星球链接:英雄算法联盟
星球里有什么?
【朋友圈】一个极致精准的自律、编程、算法的小圈子。
【算法集训】以月为单位组织算法集训,每天四题,风雨无阻。
【排行榜】每天、每周都会有榜单,激励大家不断进步,不断成长。
【个人规划】每个人都写好自己的规划,也可以查看他人的规划,时刻警醒自己不掉队。
【打卡挑战】每日一题打卡、每日早起打卡、算法集训打卡、规划完成情况打卡。
在星球里做什么?
目前星球人数达到320+,在星球里你能够遇到一群志同道合之人,因为都是花钱进来的,你不会看到任何浑水摸鱼的人,每个人都有自己的每月规划,星主每月都会组织算法集训,每天一起刷题,你可以看到别人的解题报告,取其之长,补己之短。