class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>result;
unordered_set<int>set(nums1.begin(),nums1.end());//存放结果的set,且不能重复
for(int i:nums2)//遍历nums2的元素
{
if(set.find(i)!=set.end()){
result.insert(i);
}
}
return vector<int>(result.begin(),result.end());
}
};
这道题要注意的就是,存放结果的result必须设置为unordered_set
因为unordered_set类会再插入的时候自动去重
根据交集的定义只输出一个
所以用unordered_set
class Solution {
public:
int TheSumReturn(int n)
{
// 获取每个位置上的数的平方和函数
int sum = 0;
while (n)
{
sum += (n % 10) * (n % 10);
n /= 10;
};
return sum;
}
bool isHappy(int n) {
unordered_set<int> result;
//一直执行,总会退出
while (1)
{
//如果n最后变成1或者一开始就是1,那么这个数就是快乐数
if (n == 1)
{
return true;
}
//如果循环中出现了重复,那说明这个数已经进入了无限循环,不是快乐数
if (result.find(TheSumReturn(n)) != result.end())
{
return false;
}
result.insert(TheSumReturn(n));
n=TheSumReturn(n);
}
}
};
1. 两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//因为要求返回下标,故使用map
unordered_map<int,int>map;
//第一次循环 没有这个数就放在map当中
//有的话就把配对的数输出
for(int i=0;i<nums.size();i++){
int theTrueTarget=target-nums[i];
auto iter=map.find(theTrueTarget);
if(iter!=map.end()){
return {iter->second,i};
}
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int, int> map;
//一二次的和
for (int i : nums1)
{
for (int j : nums2)
{
auto iter=map.find(i+j);
if(map.find(i+j)!=map.end())
//这个数出现过
//就在原本的出现次数上加1
{
iter->second++;
}
else map.insert(pair<int,int>(i+j,1));
}
}
//计算剩下的
int count=0;
for(int i:nums3)
{
for(int j:nums4)
{
int thefind=-(i+j);
auto iter=map.find(thefind);
if(map.find(thefind)!=map.end())
{
//每符合条件一次,就在count原本的基础上++second
count+=iter->second;
}
}
}
return count;
}
};
注释写在题上的。。。