242.有效的字母异位词
题目链接https://leetcode.cn/problems/valid-anagram/description/
class Solution {
public:
bool isAnagram(string s, string t) {
int hash[26];
for(int i=0;i<s.size();i++){
hash[s[i]-'a']++;
}
for(int i=0;i<t.size();i++){
hash[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(hash[i]!=0){
return 0;
}
}
return 1;
}
};
349.两个数组的交集合
题目链接https://leetcode.cn/problems/intersection-of-two-arrays/description/
这里用数组太小了只能有set或者map,用unordered-set最合适,因为里面不能存重复的数据
用unordered_set
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set <int> result;
unordered_set <int> num_set(nums1.begin(),nums1.end());
for(int num:nums2){
if(num_set.find(num)!=num_set.end()){//找到了就插入数据
result.insert(num);
}
}
return vector<int>(result.begin(),result.end());
}
};
num_set.find(num)如果没有找到会返回num_set.end(),num_set.find(num)!=num_set.end()的意思就我找到的数不等于没有找到的结果的话,就说明我找到了。
202.快乐数
题目链接https://leetcode.cn/problems/happy-number/description/
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> result;
int sum=getsum(n);
while(1){
if(sum==1){
return 1;
}
if(result.find(sum)!=result.end()){
return 0;//有重复的直接说明无限循环了,直接返回0就行
}
else{
result.insert(sum);没有重复就插入数据
}
}
}
};
1.两数之和
题目链接https://leetcode.cn/problems/two-sum/description/
auto iter = map.find(target - nums[i]);
这里如果map找到了对应的键值返回的iter是个对象,如果没有找到的话iter会等于map.end()
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int,int> m;
for(int i=0;i<nums.size();i++){
auto n=m.find(target-nums[i]);
if(n!=m.end()){
return {n->second,i};
}
else{
m.insert(pair<int,int>(nums[i],i));
}
}
return {};
}
};