现有两个从小到大排好序的int数组(每个数组自身没有重复元素)。请找出所有在这两个数组中都出现过的数。请写一个函数,输入为两个数组。
思路简述:因为数组已经排好序,且没有重复数据。
所以可以采用两个指针分别指向两个排序的数组num1、num2。然后当两个值相同的时候就存储下来同时将两个指针都向后移动,当num1较小时则该指针向后移动,当num2较小的时候则该指针向后移动,直到其中任何一个指针指向数组末尾。
#include <iostream>
#include <vector>
using namespace std;
vector<int> get_both_num(const vector<int>& num1,const vector<int>& num2){
vector<int> result;
if(num1.size() <=0 || num2.size() <= 0){
return result;
}
int i=0,j=0;
while(i < num1.size() && j < num2.size()){
if(num1[i] == num2[j]){
result.push_back(num1[i]);
++i;
++j;
}else if(num1[i] < num2[j]){
++i;
}else{
++j;
}
}
return result;
}
void printf(vector<int>& n){
for(int i=0;i<n.size();i++){
cout<<n[i]<<'\t';
}
cout<<endl;
}
int main()
{
vector<int> a,b;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
b.push_back(2);
b.push_back(3);
b.push_back(5);
b.push_back(9);
vector<int> c = get_both_num(a,b);
printf(c);
return 0;
}