242.有效的字母异位词
知识点:哈希表 状态:把第一个字符串存进哈希表里没问题,不知道怎么判断
思路:将第一个字符串存进哈希表后,遍历第二个字符串时将每个字符串对应的出现次数 “--map[ t[j] ] ”,并判断是否小于0,小于零则false
class Solution {
public:
bool isAnagram(string s, string t)
{
if( s.size() != t.size())
{
return false;
}
unordered_map<char,int> map;
for ( int i = 0; i < s.size();i++)
{
++ map[s[i]];
}
for ( int j = 0; j < t.size() ; j++)
{
--map[ t[j] ];
if (map[t[j]] < 0 )
{return false;}
}
return true;
}
};
![](https://i-blog.csdnimg.cn/blog_migrate/58a916cbba0838470d86ddcbb0513a2f.png)
349. 两个数组的交集
知识点:哈希表(用set) 状态:没写出来
思路:用unordered_set的原因是set自动去掉重复元素,所以 res没用vector也用的set,但因为返回值是vector,所以最后return要转换成vector;
注意:set初始化写法,也就是可以直接构造不用for一个一个往里写
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
unordered_set <int> set(nums1.begin(),nums1.end());
unordered_set <int> res;
for (int num : nums2)
{
if( set.find(num) != set.end() )
{
res.insert(num);
}
}
return vector <int>(res.begin(),res.end());
}
};
![](https://i-blog.csdnimg.cn/blog_migrate/a0b6a5a76250f12fc5a074872b5e023c.png)
202. 快乐数
知识点:哈希 状态:不会
思路:两种情况:一种是最后会变成1,另一种是循环,所以需要用哈希表来存每次的数,比较如果相等则循环了,false;哈希表中没有就插入进去。
class Solution {
public:
// 平方和
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
n /= 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;
while(1) {
int sum = getSum(n);
if (sum == 1) {
return true;
}
// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return false
if (set.find(sum) != set.end()) {
return false;
} else {
set.insert(sum);
}
n = sum;
}
}
};
![](https://i-blog.csdnimg.cn/blog_migrate/304005b5e013e2519fea2977a24c3e04.png)
1. 两数之和
知识点:哈希表map 状态:不会哈希只会暴力
思路:重点是map的两个值,分别为<数字,数字所在位置>
每次都在表中查找 ( target-nums[i] )存不存在,如存在返回i和 (target-nums[i] )的位置,如不存在,插入表中。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int,int> map;
for(int i = 0; i < nums.size(); i++) {
// 遍历当前元素,并在map中寻找是否有匹配的key
auto iter = map.find(target - nums[i]);
if(iter != map.end()) {
return {iter->second, i};
}
// 如果没找到匹配对,就把访问过的元素和下标加入到map中
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};
![](https://i-blog.csdnimg.cn/blog_migrate/7123837de6471b3f4fdb500e02497250.png)