LeetCode每日一题 (52) 349. 两个数组的交集

349. 两个数组的交集


在这里插入图片描述


方法一:双指针法

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;

    }
};

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_45021180/article/details/109446164