242.有效的字母异位词
数组也是一种hash table ,你只需知道下标就可以轻松找到你想要的。一个字符串负责增加,另一个字符串负责抵消,如果最后数组全为零就是字母异位词。
还有一个关键点是 用字符-‘a’,这个相对量作为下标。
349. 两个数组的交集
同样的因为涉及到要在一个系列里找有没有对应的元素,所以使用hash table
这一题主要是利用 unordered_set的特性,他会自动去重。
不过在这题的示例代码中,学到了一些技术上的技巧。
unordered_set<int> nums_set(nums1.begin(), nums1.end());//使用构造函数初始化了set
for(int num:nums2){}//简易得写for循环
vector(res.begin(),res.end());//直接用unordered_set变成vector
202. 快乐数
这个题目比较简单,核心是要检查之前的平方和中是否出现过当前的平方和,很自然的使用hash的方式。
1. 两数之和
这个题目第一次写的时候,也是双for循环写的,耗时很长。在听到去hash表里找你想要的元素的时候,我真的被这个想法惊到了,这里的核心是,target不是一个摆在那里供你去比对的答案,他也是操作的一部分。用target去减去当前的值,得到差,再去hash表里找有没有这个差出现过。只需要一次循环,同时,因为hash table里需要保留值和下标,所以使用map。
本文讨论了如何使用hashtable和unordered_set等数据结构解决字符串异位词判断、数组交集、快乐数和两数之和等问题,强调了哈希表在优化算法效率中的关键作用。
1064





