解题思路
使用迭代器来解决问题。
- 先将两个数组排序,之后使用迭代器遍历两个数组;
- 如果出现两个数组中的元素相等,就将其push_back到target容器中;
- 如果it1小,那么it1++;如果it2小,就it2++.
之后要养成编写测试用例的习惯,需要考虑多种极端情况。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
vector<int> intersect(vector<int> &nums1, vector<int> &nums2)
{
vector<int> target;
sort(num1.begin(),num1.end());
sort(num2.begin(),num2.end());
for(vector<int>:: iterator it1 = nums1.begin(), it2 = nums2.begin();it1 != nums1.end() && it2 != nums.end())
{
if(*it1 < *it2)
{
it1++;
}
else if(*it1 == *it2)
{
target.push_back(*it1);
it1++;
it2++;
}
else if(*it1 > *it2)
{
it2++;
}
}
for(int i = 0; i < target.size() - 1; i++)
{
cout<<target[i]<<endl;
}
return target;
}
void main() {
vector<int> nums1;
vector<int> nums2;
nums1.push_back(5);
nums1.push_back(3);
nums1.push_back(2);
nums1.push_back(6);
nums2.push_back(7);
nums2.push_back(2);
nums2.push_back(8);
nums2.push_back(6);
intersect(num1,nums2);
for(int i = 0; i < target.size() - 1; i++)
{
cout<<"重复元素为" << target[i] << endl;
}
//return 0;
}