判断两个数组中是否存在相同的数字
给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
这个问题首先想到的是一个O(nlogn)的算法。就是任意挑选一个数组,遍历这个数组的所有元素,遍历过程中,在另一个数组中对第一个数组中的每个元素进行binary search。用C++实现代码如下:
这个问题首先想到的是一个O(nlogn)的算法。就是任意挑选一个数组,遍历这个数组的所有元素,遍历过程中,在另一个数组中对第一个数组中的每个元素进行binary search。用C++实现代码如下:
int searchCommon(int a[],int size1,int b[],int size2)
{
for(int i = 0; i< size1; i++ )
{
int low = 1;
int high = size2 - 1;
int mid;
while(low < high)
{
mid = (low + high)/2;
if(a[i] == b[mid] )
return 1;
else if( a[i] < b[mid] )
high = mid - 1;
else
low = mid + 1;
}
}
return 0;
}
如果两个数组都是排好序的,那么复杂度只有N,首先设两个下标,分别初始化为两个数组的起始地址,依次向前推进 。推进的规则是比较两个 数组中的数字,小的那个数组的下标向前推进一步,直到任何一个数组的下标到达数组末尾时,如果这时还没碰到相同的数字,说明数组中没有相同的数字。
int SearchCommon(int a[], int size1, int b[], int size2)
{
int start1 = 0;
int start2 = 0;
while(start1 < size1 && start2 < size2)
{
if(a[start1] == b[start2])
return 1;
else if(a[start1] < b[start2])
start1 ++;
else
start2 ++;
}
return 0;
}