一道面试题求两个数组的交集解决思路

一道面试题求两个数组的交集
给两个数组和它们的大小,还有一动态开辟的内存,求交集,把它们的交集放到动态内存中,并返回交集大小.接口为:

long   jiaoji(long   *a[],   long   b[],   long   *alen,   long   blen,   long   *dongtai[]);


------解决方案--------------------
#include <stdlib.h>

int sort_function( const void *a, const void *b)
{
return int(*(long *)a - *(long *)b);
}

long jiaoji(long *a, long alen, long *b, long blen, long *c)
{
// 如果要保留数组a, 数组b,则在a,b进行拷贝中进行下操作
qsort((void *)a, alen, sizeof(long), sort_function);
qsort((void *)b, blen, sizeof(long), sort_function);
long *pa = a, *pb = b, *pc =c, clen=0;
long *ae = a+alen, *be = b+blen;
while( pa < ae && pb <be)
{
if(*pa == *pb)
{
*pc++ = *pa;
clen++;
pa++;
pb++;
}
else
if( *pa > *pb) pb++;
else
pa++;
}
return clen;
}


void main()
{
long a[] = { 8, 7, 1,2,3, 4, 6,};
long b[] = { 6,7, 1, 2 };
long c[4];
long clen = jiaoji(a, 7, b, 4, c);
long *pc = c;
for(long i=0; i <clen; i++)
printf( "%ld\n ", *pc++);
}
------解决方案--------------------
long jiaoji(long *a[], long b[], long *alen, long blen, long *dongtai[])
{
long i, j, k=0, flag=0;

for(i = *alen; i > 0; i--)
{
for(j = blen ; j > 0; j--)
{
if(b[j - 1] == *a[i - 1])
{
if(flag == 1 && *dongtai[k-1] == b[j -1])
{
continue;
}
flag = 1;
dongtai[k++] = &b[j - 1];
}
}
}
return k;

}
计算2个数组内相同元素的个数,允许数组内元素有重复,dongtai[]内存放相同元素的地址
------解决方案--------------------
楼上的没调试吧?
我弄了大半天,总算弄出来了```
#include <stdio.h>
#include <stdlib.h>

//jiaoji
long jiaoji(long *a[], long b[], long *alen, long blen, long *dongtai[]);

//main
void main()
{
long *a[6];
long b[4];

printf( "Input the array of a:\n " );
for(int i=0; i <6; ++i)
{
a[i] = (long* )malloc(sizeof(int));
scanf( "%ld ", &a[i][1]);
}

printf( "Input the array of b:\n ");
for(int j=0; j <4; ++j)
scanf( "%ld ", &b[j]);


long **c = (long**) malloc( 4 * sizeof(int) );
long alen = sizeof(a)/sizeof(int);
long blen = sizeof(b)/sizeof(int);

jiaoji(a, b, &alen, blen, c);

long **pc = c;

for(i=0; i <sizeof(c)/sizeof(int); ++i)
printf( "%ld ", *pc[i]);

printf( "\n ");

}

long jiaoji(long *a[], long b[], long *alen, long blen, long *dongtai[])
{
int i, j, same_sum=0;

for(i=0; i <*alen; ++i)
{
for(j=0; j <blen; ++j)
{
if(a[i][1] == b[j])
{
dongtai[same_sum] = &b[j];
++same_sum;
break;
}
else
continue;
}
}
//printf( "%d ", same_sum);
return same_sum;
}

------解决方案--------------------
就再演变一下:
long jiaoji2(long *a[], long b[], long *alen, long blen, long *dongtai[])
{
long i, clen;
long *va = new long [*alen];
long *vb = new long [blen];