力扣
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
求交集的话
1.两个指针指向的元素,小的++
2.相等的就是交集,同时++往后走
3.只要有一个指针走到头了,那就结束了。
求差集
1.两个指针指向的元素小的就是差集(因为我另外一个集合中找不到这个小的数据了)
然后元素小的指针向后++
2.相等就是同时++
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> s1(nums1.begin(),nums1.end());
set<int> s2(nums2.begin(),nums2.end());
auto it1=s1.begin();
auto it2=s2.begin();
vector<int>v;
while(it1!=s1.end()&&it2!=s2.end())
{
if(*it1<*it2)
{
++it1;
}
else if(*it2<*it1)
{
++it2;
}
//相等的情况就是交集
else
{
v.push_back(*it1);
++it1;
++it2;
}
}
return v;
}
};