您的位置:首页 > 其它

LeetCode-349 Intersection of Two Arrays

2016-06-14 22:58 363 查看
https://leetcode.com/problems/intersection-of-two-arrays/

Given two arrays, write a function to compute their intersection.

Example:

Given nums1 = 
[1, 2, 2, 1]
, nums2 = 
[2,
2]
, return 
[2]
.

Note:

Each element in the result must be unique.
The result can be in any order.

1、先排序,再用两指针分别扫描两数组(12ms)

class Solution {

public:

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

        vector<int> num;

        sort(nums1.begin(),nums1.end());

        sort(nums2.begin(),nums2.end());

        int i = 0,j = 0;

        while(i<nums1.size() && j < nums2.size()){

            if(nums1[i] == nums2[j] && find(num.begin(),num.end(),nums1[i]) == num.end()){

                num.push_back(nums1[i]);

                i++;

                j++;

                continue;

            }

            if(nums1[i]<nums2[j])

                i++;

            else

                j++;

        }

    return num;

    }

};

2、发现STL中有set_intersection()函数,是对于排好序后的两个集合(即不会有重复元素)求交集,因此这里调用该函数的话,会有重复元素出现。

2.1利用unique、erase去重:

class Solution {

public:

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

        sort(nums1.begin(),nums1.end());

        sort(nums2.begin(),nums2.end());

        vector<int> num(100000);   // 数组长度影响:100000——28ms,500——12ms

        auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());

        num.resize(iter-num.begin());

        vector<int>::iterator iter1 = unique(num.begin(),num.end());

        num.erase(iter1,num.end());

    return num;

    }

};

2.2直接遍历去重:

class Solution {

public:

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

        sort(nums1.begin(),nums1.end());

        sort(nums2.begin(),nums2.end());

        vector<int> num(1000),result;// 同上,数组长度影响:100000——28ms,(500、1000等)——12ms

        auto iter = set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),num.begin());

        num.resize(iter-num.begin());

        int len = num.size();

        for(int i = 0;i<len;i++){

            if(! result.empty() && num[i]==result.back())

                continue;

            result.push_back(num[i]);

        }

    return result;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode