题目:给定两个数组,求数组的交集。输出结果中的元素唯一,输出数组可以无序。
solution:1.对两个数组分别进行排序
2. 建立两个指针,分别指向两个数组的第一个数字,比较两个数字的大小,如果相等,并且不等于结果中最后一个数字则加入结果,否则将小的数字对应的指针往前移动一位。
遇到的问题:做了Intersection of Two Arrays II后,虽然知道和它的区别是需要与结果中的数比较,相等的就不能加进去,但是不知道该如何实现。
看了别人的代码后,学习到创建一个变量来存储结果中的最后一个数字。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector <int> res;
int iter1=0;
int iter2=0;
int mark=0;
while(iter1<nums1.size()&&iter2<nums2.size())
{ if(nums1[iter1]==nums2[iter2])
{
if(res.size()==0||nums1[iter1]!=mark)
{
res.push_back(nums1[iter1]);
iter1++;
iter2++;
mark=nums1[iter1];
}
}
else if(nums1[iter1]<nums2[iter2])
iter1++;
else
iter2++;
}
return res;
}
};