set LeetCode:349 两个阵列的交集

LeetCode:349 两个阵列的交集

问题描述

给定两个数组,编写一个函数来计算它们的交集。
例1:
      输入: nums1 = [1,2,2,1],nums2 = [2,2]
      输出:[2]
例2:
      输入: nums1 = [4,9,5],nums2 = [9,4,9,8,4]
      输出:[9,4]
注意:结果中的每个元素都必须是唯一的。
           结果可以是任何顺序。

解决代码:

#include<iostream>
#include<vector>
#include<set>
using namespace std;

class Solution {
public:
	vector<int> intersetion(vector<int> &nums1, vector<int> &nums2) {
		set<int> record;
		for (int i = 0; i < nums1.size(); i++)
			record.insert(nums1[i]);
		set<int> resultSet;
		for (int i = 0; i < nums2.size(); i++)
			if (record.find(nums2[i]) != record.end())
				resultSet.insert(nums2[i]);
		vector<int> resultVector;
		for (set<int>::iterator iter = resultSet.begin(); iter != resultSet.end(); iter++)
			resultVector.push_back(*iter);
		return resultVector;
	}
	vector<int> intersetionSample(vector<int> &nums1, vector<int> &nums2) {
		set<int> s(nums1.begin(), nums1.end());
		vector<int> out;
		for (int x : nums2)
			if (s.erase(x))
				out.push_back(x);
		return out; 
	}
	vector<int> intersectionSample2(vector<int>& nums1, vector<int>& nums2) {
        set<int> s(nums1.begin(),nums1.end());
        set<int> s1(nums2.begin(),nums2.end());
        vector<int> ret;
        set_intersection(s.begin(),s.end(),s1.begin(),s1.end(),inserter(ret,ret.begin()));
       /*
       第一个集合的头和尾
       第二个集合的头和尾
       最后一个参数,一般情况为inserter(C1, C1.begin()).   
       意思是将第一个集合和第二个集合取并集后存在集合C中
      set_intersection()也是set集合中的一个函数,他是用来取两个集合的交集
      */
        return ret;
    }
};
int main() {
	vector<int> nums1 = { 4,9,5 }, nums2 = { 9,4,9,8,4 };
	Solution re;
	vector<int> result = re.intersetion(nums1, nums2);
	for (int i = 0; i < result.size(); i++)
		cout << result[i] << "  ";
	getchar();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weijiancheng999/article/details/88208311