nums1:22946
num2:2218
return 22
但是题目要求返回的是 2
也就是去重之后的
所以这道题适合用set来做
set哈希
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> s1(nums1.begin(),nums1.end());;
set<int>s2(nums2.begin(),nums2.end());;
auto it1=s1.begin();
auto it2=s2.begin();
vector<int>ret;
while(it1!=s1.end()&&it2!=s2.end())
{
if(*it1<*it2)
{
it1++;
}
else if( *it1>*it2)
{ it2++;
}
else
{
ret.push_back(*it1);
it1++;
it2++;
}
}
return ret;
}
};
上面的代码太冗余了 改为这个: 直接在s2中查找s1,看s1是否出现过。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>s1(nums1.begin(),nums1.end());
unordered_set<int>s2(nums2.begin(),nums2.end());
vector<int>ret;
for(int num:s1)
{
if(s2.count(num)) ret.push_back(num);
}
return ret;
}
};