给两个数组,写一个函数来计算这两个数组的交集。
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [9,4]
注意:
- 结果中的元素没有重复
- 结果的顺序无所谓
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
std::sort(nums1.begin(), nums1.end());//sort是c++,algorithm库里的方法
std::sort(nums2.begin(), nums2.end());
std::set_intersection(nums1.begin(), nums1.end(), nums2.begin(), nums2.end(), insert_iterator<vector<int>>(res, res.begin()));//set_intersection求两个有序序列的交集,等价于下面的程序;insert_iterator插入迭代器,将元素插入容器
set<int> st(res.begin(), res.end());//通过vector构造set
res.assign(st.begin(), st.end());//st向res赋值,这一句和上一句一起,是为了给res去重
return res;
}
};
----------------------------------------------------------------------------------------------------------------------
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) ++first1;
else if (*first2<*first1) ++first2;
else {
*result = *first1;
++result; ++first1; ++first2;
}
}
return result;
}