我想在两个数组之间找到共同的元素。我的功能无法正常工作。 数组已排序。 只想将两个排序的数组放入check_common函数中以显示常用元素。 任何人都可以帮忙解决它!
void check_common (int x[], int size1, int y[], int size2)
{
int temp;
cout << " Common elements are:\t" << endl;
for ( int i=0; i <= size2; i++ )
{
for ( int j=0; j <= size1; j++)
{
if (x[j] == y[j]){
temp = x[j];
cout << temp << "\t";}
}
}
cout << endl;
}
答案 0 :(得分:1)
如果在任一数组中,项目不是唯一的,那么您的解决方案将失败,因为所有其他元素都会被移位。
天真的解决方案是使用O(n)
检查。检查array1中的每个元素(如果它也存在于array2中)。由于列表已排序,因此执行此检查位于O(log(n))
。
因此整个运行时将是O(nlog(n))
,这是相当好的。
如果您可以保证每个列表项都是唯一的,则可以在O(log(n))
。
答案 1 :(得分:0)
它看起来像是一个“家庭作业”,所以这里有建议。
x
,另一个用于y
数组。将两个指针向前移动,无论哪个指向“较小”值。当两者都达到阵列限制时停止。每次指针指向相同的值时,都会将其打印出来。这样的假设nx
的大小为x
且大小为ny
y
:
ix=0 ;
iy=0 ;
while ( ix < nx && iy < ny )
{
if ( x[ix] == y[iy] )
{
std::cout << x[ix] << "\t" ;
ix++ ;
iy++ ;
}
else if ( x[ix] < y[iy] )
ix++ ;
else
iy++ ;
}
我将离开你,改进这个功能,并改变check_common
函数参数。