LeetCode 349. Intersection of Two Arrays

125 篇文章 1 订阅
17 篇文章 0 订阅

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

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

思路:
找出nums2与nums1相交的元素,若重复,则只要一个。
具体思路见代码

新方法代码:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result;
        set<int> setnums1(nums1.begin(),nums1.end());//将两个vector的数值放到set里去年重合的
        set<int> setnums2(nums2.begin(),nums2.end());
        for(set<int>::iterator iter1=setnums1.begin(),iter2=setnums2.begin();
        iter1!=setnums1.end()&&iter2!=setnums2.end();){//分别从两个set从头往后循环,如果都没有到结尾(有一个到结尾就跳出循环)
            if(*iter1==*iter2){//如果两个值相等
                result.push_back(*iter1);//这个值就为重合的
                ++iter1;//iter1和iter2都后移
                ++iter2;
            }
            else if(*iter1<*iter2){//如果*iter1值小,iter1后移
                ++iter1;
            }
            else if(*iter1>*iter2){//如果*iter2值小,iter2后移
                ++iter2;
            }
        }
        return result;
    }
};

输出结果: 9ms

原始代码:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result;
        for (vector<int>::iterator ix = nums1.begin(); ix != nums1.end(); ++ix){
            for (vector<int>::iterator iy = nums2.begin(); iy != nums2.end(); ++iy){
                if (*ix == *iy){//以nums1为外循环,nums2为内循环,若发现nums2中
                    result.push_back(*iy);//有nums1中相等的值,放到result中
                    for (unsigned int i = 0; i < result.size() - 1; ++i){//因为要除去相同的,所以要再循环result,
                        if (result[i] == result[result.size() - 1]){//如果最后一个保存的值与原有相等,则再删除
                            result.pop_back();
                        }
                    }
                }
            }
        }
        return result;
    }
};

输出结果: 76ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值