Day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
哈希表都是用来快速判断一个元素是否出现集合里。
242.有效的字母异位词
初见思路:暴力有点太麻烦 pass
改良后:看了思路才想起来这题见过,是哈希的入门题,用的太少了,容易忘记,注意回顾。
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26]={0};
for(int i=0;i<s.size();i++){
record[s[i]-'a']++;
}
for(int i=0;i<t.size();i++){
record[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(record[i]!=0)
return false;
}
return true;
}
};
349.两个数组的交集
哈希表还是不熟练,跟着讲解写的;
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
unordered_set<int> nums_set(nums1.begin(),nums1.end());
for(int num:nums2){
if(nums_set.find(num)!=nums_set.end()){ //.find()没找到的话
result_set.insert(num); //返回.end()
}
}
return vector<int>(result_set.begin(),result_set.end());
}
};
202.快乐数
不熟练,跟讲解
不重复(一旦重复就停了)所以用unorder_set
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;
if(set.find(sum)!=set.end()){
return false;
}else{
set.insert(sum);
}
n=sum;
}
}
};
1.两数之和
梦开始的地方,看到半年前提交的双重for循环的答案,还是很感慨的。
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++){
auto iter=map.find(target-nums[i]);
if(iter!=map.end()){
return{iter->second,i};
}
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};