1. 有效的字母异位词
【注意】使用哈希表求解(unordered_map)
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.length() != t.length()) {
return false;
}
unordered_map<char, int> map;
for (char cha1 : s) {
map[cha1] += 1;
}
for (char cha2 : t) {
map[cha2] -= 1;
}
for (auto item : map) {
if (item.second != 0) {
return false;
}
}
return true;
}
};
2. 两个数组的交集
【注意】使用set求解,最后题目要求返回vector,需要转化为vector提交。
vector<int> result(set1.begin(), set1.end());
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> set1;
unordered_set<int> set2(nums1.begin(), nums1.end());
for (auto item : nums2) {
if (set2.find(item) != set2.end()) {
set1.insert(item);
}
}
vector<int> result(set1.begin(), set1.end());
return result;
}
};
3. 快乐数
【注意】计算各个位数上的数之和
class Solution {
public:
int get_sum(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 = get_sum(n);
if (sum == 1) {
return true;
}
if (set.find(sum) != set.end()) {
return false;
}
else {
set.insert(sum);
}
n = sum;
}
}
};
4. 两数之和
【注意】使用unordered_map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
auto item = map.find(target - nums[i]);
if (item != map.end()) {
return {item->second,i};
}
map.emplace(nums[i],i);
}
return {};
}
};