前提:排序+去重
思路:两个位置指向两个容器,小的++,相等同时++,相等就是交集,小的和一个遍历完另一个剩下的就是差集
时间复杂度: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
循环中,您需要使用!=
而不是<
来比较迭代器,因为迭代器不支持<
运算符来比较是否到达了集合的末尾。