- 求两个有序数组的公共元素
- 求三个有序数组的公共元素
- 求 n 个有序数组的公共元素
#include
#include
int* two_common(int a[], int b[], int m, int n, int *num){
int i = 0, j = 0,cnt = 0,min = m;
int *p;
if(m > n){
min = n;
}
p = (int *)malloc(min * sizeof(int));
while(i < m && j < n){
if(a[i] > b[j]){
j++;
}
if(a[i] < b[j]){
i++;
}
else{
*(p + cnt) = a[i];
cnt++;
i++; j++; // !!!зЂвт
}
}
*num = cnt;
return p;
}
int* three_common(int a[], int b[], int c[], int m, int n, int x, int *num){
int n1 = 0;
int *p, *q;
p = two_common(a, b, m, n, &n1);
q = two_common(p, c, n1, x, num);
return q;
}
int main(){
int a[] = {1, 3, 5, 7, 9, 13};
int b[] = {2, 4, 5, 8, 9};
int *p, i, num = 0;
p = two_common(a, b, 6, 5, &num);
for(i = 0; i < num; i++){
printf("%d,", *(p + i));
}
int a[] = {1, 3, 6, 7, 100, 13};
int b[] = {2, 4, 7, 8, 13};
int c[] = {5, 7, 9, 13};
int *p, i, num = 0;
p = three_common(a, b, c, 6, 5, 4, &num);
for(i = 0; i < num; i++){
printf("%d,", *(p + i));
}
return 0;
}