//case 5一直超时,悲剧啊。时间复杂度O(M*N<span style="font-family: Arial, Helvetica, sans-serif;">)</span>
# include <stdio.h>
int main()
{
int a[100000], b[100000];
int *p=a, *q=b;
int i, cou=0;
scanf("%d",&a[0]);//data input
for(i = 0; a[i] != -1; )
{
i ++;
scanf("%d",&a[i]);
}
scanf("%d",&b[0]);
for(i = 0; b[i] != -1; )
{
i ++;
scanf("%d",&b[i]);
}
if(a[0]==-1 || b[0]==-1)//特殊处理
{
printf("NULL\n");
return 0;
}
for( q = b; *q!=-1; q ++)//交集
{
for( p = a; *p!=-1; p ++)
{
if(*p == *q)
{
cou ++;
if(cou == 1)
printf("%d",*p);
else
printf(" %d",*p);
break;
}
}
}
if(cou == 0)
{
printf("NULL\n");
}
return 0;
}
//利用“有序”条件后,时间复杂度O(M+N)
# include <stdio.h>
int main()
{
int a[100000], b[100000];
int *p=a, *q=b;
int i, cou=0;
scanf("%d",&a[0]);//data input
for(i = 0; a[i] != -1; )
{
i ++;
scanf("%d",&a[i]);
}
scanf("%d",&b[0]);
for(i = 0; b[i] != -1; )
{
i ++;
scanf("%d",&b[i]);
}
if(a[0]==-1 || b[0]==-1)//特殊处理
{
printf("NULL\n");
return 0;
}
for( p = a,q = b; *p!=-1 && *q!=-1; )//交集2.0
{
if(*p < *q)
p ++;
else if(*p > *q)
q ++;
else
{
cou ++;
if(cou == 1)
printf("%d",*p);
else
printf(" %d",*p);
p ++;
q ++;
}
}
if(cou == 0)
{
printf("NULL\n");
}
return 0;
}