/*
* 给定两个排好序的数组A,B,大小分别为n,m。给出一个高效算法查找A中的哪些元素存在B数组中。
*
* 方法一:一般在大数组中执行二分查找,将小数组的元素作为需查找的对象。复杂度为 N*log(M)
*
* 方法二:可以使用两个指针遍历AB,比较当前大小就可以了...时间复杂度o(n+m)
*/
解法如上述所给方法所示,现实现方法二的代码如下所示~
#include <iostream>
using namespace std;
int arrA[] = {1,2,3,3,3,3,4,5,5,5,6,7,7,7,8};
int arrB[] = {2,3,4,6,8,12,23,45}; //查找A中哪些元素在B中
void solve(int lenA, int lenB)
{
int j = 0;
for(int i=0; i<lenA; i++)
{
for(; j<lenB; j++) //j 保持指向上次查询完移动到的位置
{
if(arrA[i] < arrB[j]) //数组A的元素比数组B的首元素 小,跳出内层循环
{
break;
}
else if(arrA[i] == arrB[j]) //A中的元素出现在B中,将其输出,然后A中元素继续向后判断,此时j值不变
{
cout<<arrA[i]<<" ";
break;
}
else //数组A的元素比数组B的首元素 大,内层循环continue
{
continue;
}
}
}
}
int main()
{
int lenA = sizeof(arrA) / sizeof(int);
int lenB = sizeof(arrB) / sizeof(int);
solve(lenA, lenB);
}
欢迎读者留言探讨~O(∩_∩)O~