找出两个已排序列表中的所有相同元素
题目:
步骤:
1) i := 0, j := 0
2) if i>=alen || j>=blen
return
3) if a[i] == b[j]
i++, j++
goto 2)
4) if a[i] < b[j]
i++
goto 2)
5) if b[j] < a[i]
j++
goto 2)
共需比较max(列表1长度,列表2长度)次。
c实现:
#include <stdio.h>
void fun_same(const int * a, int alen, const int * b, int blen)
{
int i=0,j=0;
l: if(i>=alen || j>=blen)
{
printf("\n");
return;
}
if(a[i]==b[j])
{
printf("%d ", a[i]);
i++;j++;goto l;
}
if(a[i]<b[j])
{
i++; goto l;
}
if(a[i]>b[j])
{
j++; goto l;
}
}
int main()
{
int a[]={2,5,5,5};
int b[]={2,2,3,5,5,7};
fun_same(a,sizeof(a)/sizeof(int), b, sizeof(b)/sizeof(int));
return 0;
}