242.有效的字母异位词
思路:用一个数组来储存单词字母的出现次数,再减去第二个单词的字母出现次数,最后检验数组是否全为零。
代码:
class Solution {
public:
bool isAnagram(string s, string t) {
int tem[26]={0};
for(int i=0;i<s.size();++i){
tem[s[i]-'a']++;
}
for(int i=0;i<t.size();i++){
tem[t[i]-'a']--;
}
for(int i=0;i<26;i++)
{
if(tem[i]!=0)
return false;
}
return true;
}
};
349. 两个数组的交集
思路:运用两个set,一个用来筛选相同元素,另一个用来去重作为结果集。
代码:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> res;
unordered_set<int> tem(nums1.begin(),nums1.end());
for(int num:nums2){
if(tem.find(num)!=tem.end())
res.insert(num);
}
return vector<int>(res.begin(),res.end());
}
};
202. 快乐数
思路:用一个函数来求各位数平方和有点难,然后就是用set判断是否循环。
代码:
class Solution {
public:
int getnum(int n){
int sum=0;
while(n){
sum+=(n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;
set.insert(n);
while(1){
n=getnum(n);
if(n==1)
return true;
if(set.find(n)!=set.end())
return false;
else
set.insert(n);
}
return false;
}
};
1. 两数之和
思路:经典题了,一开始还是只晓得用双重for循环,用map关键就是key存数据,value存下标。
代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map;
for(int i=0;i<nums.size();++i){
int a=target-nums[i];
unordered_map<int,int>::iterator it=map.find(a);
if(it!=map.end())
return {it->second,i};
else
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};