-
242.有效的字母异位词
哈希表题目,没有按照答案那样,使用数组来模拟哈希表。而是使用unordered_map,锻炼一下自己对容器的使用。
class Solution {
public:
bool isAnagram(string s, string t) {
int slen=s.size();
int tlen=t.size();
if (slen != tlen) return false;
unordered_map<char, int> Smap;
unordered_map<char, int> Tmap;
for (int i = 0; i < slen; i++){
Smap[s[i]]++;
Tmap[t[i]]++;
}
for (int i = 0; i < slen; i++){
if(Smap[s[i]] != Tmap[s[i]]) return false;
}
return true;
}
};
-
349. 两个数组的交集
哈希表练习,简单题,使用了unordered_set容器。
1.先遍历nums1,得到哈希表
2.遍历nums2,将哈希表中存在的数导出并保存到ans里,之后删除该数,避免重复读取。
3.输出ans
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int size1=nums1.size(), size2 = nums2.size();
vector<int> ans;
unordered_set<int> Hash;
for (int i = 0; i < size1; i++){
if (Hash.find(nums1[i])==Hash.end()) Hash.insert(nums1[i]);
}
for (int i = 0; i < size2; i++){
if (Hash.find(nums2[i]) != Hash.end()){
ans.push_back(nums2[i]);
Hash.erase(nums2[i]);
}
}
return ans;
}
};
-
202. 快乐数
简单题,代码不难,主要是得理清题意
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) {
int sum = 0;
unordered_set<int> set;
while(1){
sum = getSum(n);
if(sum == 1) return true;
if(set.find(sum) != set.end()) return false;
else set.insert(sum);
n = sum;
}
}
};
-
1. 两数之和
见仁见智,此题我有个认为非常精妙的点在于,{it->second,i},因为如果后一个数对应以后,前一个数是一定出现过的,所以it->second的值一定小于i。虽然这个顺序不会影响最后的结果,但我自己认为很巧妙。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); i++) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return {it->second, i};
}
hashtable[nums[i]] = i;
}
return {};
}
};