day5 hsah表

题目:

https://leetcode.cn/problems/valid-anagram/submissions/538775032/
题目解析:
https://programmercarl.com/0242.有效的字母异位词.html#算法公开课
这道题只会暴力解,看完解析以后觉得非常巧妙,用一个表来记录数组1,再遍历数组2,如果有相同数字则减去;
最后用循环判断是否全部值为0;
其中可以记住的方法是,如何把字母转成它相对应的位置的数值增减:

 record[s[i] - 'a']++;
// 其中s[i]为字符串中的字母,减去'a'可得相对位置,在相对位置加1记录字幕出现频率;

题目:

https://leetcode.cn/problems/intersection-of-two-arrays/submissions/538778053/
题目解析:
https://programmercarl.com/0349.两个数组的交集.html
思路是采用unordered_set抽取第一个数组已出现数字,因为set是无重复的;
再遍历第二个,确认在set中是否出现,如在set中出现则放入res(这个也是set,因为结果不希望出现重复数字);
最后把res转化成临时的vector返回;

题目:

https://leetcode.cn/problems/happy-number/submissions/538784491/
题目解析:
https://programmercarl.com/0202.快乐数.html#思路
这题需要新建一个求和函数,逐个求数字每个位置的平方和;
但是最关键的逻辑点是:当所求数据重复出现了就必须return false;因为如果所求数据能够重复出现说明用此数字会反复出现自己,最终导致死循环。
这有点像脑筋急转弯,所以最终需要用unordered_set记录是否重复出现。
逻辑就是,求和,如果为1则return true;(如果记录和已经出现则return false;未出现则记录进set;)
采用循环循环上述步骤;并在循环中更新所求的和。

题目:

https://leetcode.cn/problems/two-sum/submissions/538788560/
题目解析:
https://programmercarl.com/0001.两数之和.html
刚开始以为也要用set,可是想了没想到怎么同时记录值和位置,看了解析发现使用map来同时记录;
具体逻辑:确认target减去循环中数组的数值,如果在存在,则返回当前nums的位置和所找到的值的位置,否则记录进map(使用pair打包);
没找到则返回空 return {};

posted @ 2024-06-11 23:12  zhangenigma  阅读(19)  评论(1)    收藏  举报