在网上看到一个题目如下:
现有一个数组A和数组B,查找A中的元素是否存在于B中,如果存在于B中,记录第一次该数出现在B中的位置。
我想到的笨办法,就是把A中的数取出来一个个和B中的比较并记录,下面代码是网上别人给出的算法,会快很多,我在linux下测试,快了大概三个数量级。
struct timeval start_1;
struct timeval end_1;
unsigned long timer;
gettimeofday(&start_1,NULL);
/*上面代码是记录程序开始时间*/
/*以下是程序主要代码*/
int temp[ARRAY_MAX] = {0};
for(i=0; i<ARRAY_MAX; i++)
{
temp[b[i]] = i;
}
for(i=0; i<ARRAY_MAX; i++)
{
if (temp[a[i]])
c[i] = temp[a[i]];
}
/*程序主要代码结束,一下是记录程序结束时间*/
gettimeofday(&end_1,NULL);
timer = 1000000 * (end_1.tv_sec-start_1.tv_sec)+ end_1.tv_usec-start_1.tv_usec;
printf("[check_a_from_b_2]timer = %ld us\n",timer);