Leetcode349——两个数组的交集

    给定两个数组,写一个函数来计算它们的交集。

三种方法,从暴力到优化
1. O(n²)
两个for循环直接遍历

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int s1=nums1.size();
        int s2=nums2.size();
        vector<int> res;
        for(int i=0;i<s1;i++){
            for(int j=0;j<s2;j++){
                if(nums1[i]==nums2[j] && count(res.begin(),res.end(),nums1[i])==0 ){
                    res.push_back(nums1[i]);
                }
            }
        }
        return res;
    }
};

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    O(nlogn)
    先对数组进行排序,然后用两个指针移动比较

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int s1=nums1.size();
        int s2=nums2.size();
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        int i=0,j=0;
        vector<int> res;
        while(i<s1 && j<s2){
            if(nums1[i]>nums2[j]){
                j++;
            }
            else if(nums1[i]<nums2[j]){
                i++;
            }
            else{
                if(count(res.begin(),res.end(),nums1[i])==0){
                    res.push_back(nums1[i]);
                }
                i++;
                j++;
            }
        }
        return res;
    }
};

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    O(n)


---------------------
作者:westbrook1998
来源:CSDN
原文:https://blog.csdn.net/westbrook1998/article/details/80151805
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-07-30 13:25  天涯海角路  阅读(88)  评论(0)    收藏  举报