找公共元素

  • 求兩個有序數組的公共元素
  • 求三個有序數組的公共元素
  • 求 n 個有序數組的公共元素
#include<stdio.h>
#include<stdlib.h>

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章