代码随想录 349. 两个数组的交集

74 阅读1分钟

349. 两个数组的交集 - 力扣(LeetCode)

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;


    }
};