Leetcode 349. 两个数组的交集 解题思路及C++实现

解题思路:

先对数组进行排序,然后从小到大去找相同的元素。

程序大循环是遍历两个数组。

循环体内,当找到相等的数之后,要注意跳过重复的数字。

 

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
        //先对这两个数组进行排序
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        
        //相当于给两个数组分别设计了一个指针
        int i = 0;
        int j = 0;
        vector res;
        while(i < nums1.size() && j < nums2.size()){
            if(nums1[i] == nums2[j]){
                res.push_back(nums1[i]);
                i++;
                j++;
                //跳过重复的元素
                while(i < nums1.size() && nums1[i] == nums1[i - 1]) i++;
                while(j < nums2.size() && nums2[j] == nums2[j - 1]) j++;
            }
            else if(nums1[i] < nums2[j]){
                i++;
            }
            else j++;
        }
        return res;
    }
};

 

你可能感兴趣的:(Leetcode)