Day6 哈希表1
作业条:
242. 有效的字母异位词
题目链接:
https://leetcode.cn/problems/valid-anagram/
视频讲解
第一想法
创建一个26个单位的数组表示每个字母出现的频次,然后分别统计两个单词字母出现的频率,如果不相同则直接返回,如果最后数组一致则为异位词。
看完解答后的想法
相同
实现过程中的问题
无
349. 两个数组的交集
https://leetcode.cn/problems/intersection-of-two-arrays/
第一想法:
用第一个数组创建一个set,如果第二个数组在这个set里面出现,那么就把这个值加入到结果set;
或者开辟一个长度为1001的数组,然后如果数组1出现,就把对应值设为1;如果数组2里面也出现并且hash值为1,那么就是相交数字。
看完解答后的想法:
实现过程中的问题:
注意unordeder_set的使用方法
初始化:unordered_set
查找:set1.find(num)!=set1.end()
插入:res.insert(num);
202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
第一想法:
没看明白
看完解答后的想法:
每次计算每个位上数字的平方和,然后判断这个和有没有在set中出现,如果出现过则表示重复,不是happy数;如果是1则是happy数。
实现过程中的问题:
1.两数之和
题目链接:
https://leetcode.cn/problems/two-sum/
文章讲解
https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E6%80%9D%E8%B7%AF
视频讲解
第一想法
用双重循环遍历数组
看完解答后的想法
用map保存数字和下标,然后用target-nums[i]直接找有没有对应的,如果没有,则加入map;如果有,则输出两个值的下标
实现过程中的问题
注意map的初始化和使用
std::unordered_map <int,int> map;
auto iter = map.find(target - nums[i]);
if(iter != map.end())
return {iter->second, i};
map.insert(pair<int, int>(nums[i], i));
今日收获和学习时长
2h