242.有效的字母异位词
class Solution {
public:
bool isAnagram(string s, string t) {
int a[26];
for(int i=0;i<s.size();i++){
int j=s[i]-'a';
a[j]++;
}
for(int i=0;i<t.size();i++){
int j=t[i]-'a';
a[j]--;
}
for(int i=0;i<26;i++){
if(a[i]!=0)
return false ;
}
return true;
}
};
有点像之前学过的桶排序,没什么应该注意的,记得当要求出现次数时用哈希表就行
349. 两个数组的交集
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> a;
unordered_set<int> b(nums1.begin(),nums1.end());
for(int num:nums2){
if(b.find(num)!=b.end())
a.insert(num);
}
return vector<int> (a.begin(),a.end());
}
};
注意一下for(int num:nums2)的意思是用num遍历nums2中的数,还有if中find的返回值找到的话返回迭代器位置,没找到返回end()
202. 快乐数
class Solution {
public:
int getsum(int n) {
int sum = 0;
while (n > 0) {
sum = sum + pow(n % 10, 2);
n=n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int>a;
while (1) {
auto sum = getsum(n);
if (sum == 1)
return true;
if (a.find(sum) == a.end())
a.insert(sum);
else
return false;
n = sum;
}
return false;
}
};
没什么应该注意到的,最大难点应该是set的语法忘了吧哈哈哈
1. 两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> a;
for(int i=0;i<nums.size();i++){
auto k=a.find(target-nums[i]);
if(k!=a.end()){
return {k->second,i};}
a.emplace(nums[i],i);
}
return {};
}
};
注意应返回一个数组,初学者可以用emplace简化insert操作
本文介绍了四个编程问题的解决方案,涉及字母异位词的检查、数组交集的查找、快乐数的判断以及两数之和的寻找,重点展示了使用哈希表、unordered_set和unordered_map等数据结构的技巧。

被折叠的 条评论
为什么被折叠?



