哈希表基础:
定义: 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。
Map和Set不能通过下标访问数据,因为集合里面元素无序。所以遍历Map和Set中的数据一般使用for of或者forEach方法
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
常见的三种哈希结构:
- 数组
- set(集合)
- map(映射)
一、242有效的字母异位数
思路:
字母26位,设置一个额外的数组对应所有的字母,以此记录每个字母出现的次数,s中出现一次++,t中出现一次--,最后判断数组中是否小于0的值,如果有说明st中相同字符出现的次数不同。
提交代码:
二、 349两个数组的交集
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
- 用双重for循环解决,时间复杂度是O(n^2)
- 输出结果每个元素是唯一的,也就是说输出的结果的去重的,可以考虑用set!!
提交代码:
- 判断更短的数组,提高效率
三、202快乐数
思路:
- 重复每个数平方求和的步骤,可以变成循环+reduce,直到和为1. 如果出现重复的数字,说明不可能最后和为1,所以判断如果出现重复数,就返回false,可以用set储存出现过的数字
reduce()用法:
prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;
cur 必需。表示当前正在处理的数组元素;
index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为- 0,否则起始索引为1;
arr 可选。表示原数组;
init 可选。表示初始值。
提交代码:
四、1两数之和
题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
-暴力解法:两重循环,查找符合nums[i]+num[j]==target的i,j
- 两数和,可以用target减去当前值,然后查找储存值中是否存在差值,返回其下标。没有的话存进储存值中
提交代码:
- 暴力解法
- Map