方法一:双指针法
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int length1 = nums1.size(), length2 = nums2.size();
int index1 = 0, index2 = 0;
vector<int> result;
while(index1<length1 && index2<length2){
// 只要其中一个遍历完就结束
if(nums1[index1]==nums2[index2]){
// 两个相等后,还需要判断一下result是否存在这个值
if(result.size()==0 || nums1[index1]!=result.back()){
result.push_back(nums1[index1]);
}
index1++;
index2++;
}
else if(nums1[index1] < nums2[index2]){
index1++;
}
else{
index2++;
}
}
return result;
}
};
方法二:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> Setnums1=unordered_set(nums1.begin(), nums1.end());
unordered_set<int> Setnums2=unordered_set(nums2.begin(), nums2.end());
vector<int> result;
for(const int& item:Setnums1){
if(Setnums2.count(item)){
result.push_back(item);
}
}
return result;
}
};