前提:排序+去重
思路:两个位置指向两个容器,小的++,相等同时++,相等就是交集,小的和一个遍历完另一个剩下的就是差集
时间复杂度:O(n)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> s1(nums1.begin(),nums1.end()),s2(nums2.begin(),nums2.end());
vector<int> equal_v;
set<int>::iterator it_be=s1.begin(),it2_be=s2.begin();
set<int>::iterator it_en=s1.end(),it2_en=s2.end();
while((it_be!=it_en)&&(it2_be!=it2_en))
{
if(*it_be<*it2_be)
{
it_be++;
}
else if(*it2_be<*it_be)
{
it2_be++;
}
else
{
equal_v.push_back(*it2_be);
it2_be++;
it_be++;
}
}
return equal_v;
}
};
补充:
-
在
while
循环中,您需要使用!=
而不是<
来比较迭代器,因为迭代器不支持<
运算符来比较是否到达了集合的末尾。