问题描述:输入为两个有序数组,输出为共同元素。
分析:最简单的方法就是循环中套循环,时间复杂度为O(n*m),但是我们并没有用到有序这个有利条件。
我们可以用两个指针i和j分别指向a和b,比较a[i]和b[j],根据比较结果移动指针:
1. a[i] < b[j],则i增加1,继续比较
2. a[i] == b[j],则i和j皆加1,继续比较
3. a[i] < b[j],则j加1,继续比较
void FindCom(int *a, int *b, int n)
{
int i = 0;
int j = 0;
while(i < n && j < n)
{
if (a[i] == b[j])
{
cout << a[i] << endl;
i++;
j++;
}
else if (a[i]< b[j])
{
i++;
}
else
{
j++;
}
}
}