博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

求两个数组的交集的补集

Posted on 2013-06-10 17:58  david2303  阅读(397)  评论(0编辑  收藏  举报

在stackoverflow看到求两个数组的交集的补集的提问。可惜当我写好代码,准备提交的时候,发现那个题目被大神关了。在这里留下痕迹吧

 

例如 a1 = {1,2,3,6}; a2 = {2, 6, 7}

输出就是{1, 3, 7}

 

#include"stdlib.h"
#include"stdio.h"

int main()
{
    int arr1[] = {2, 3, 4};
    int arr2[] = {1, 2, 4, 5}; 
    int i = 0;
    int j = 0;
    int size1 = sizeof(arr1)/sizeof(int);
    int size2 = sizeof(arr2)/sizeof(int);
    
    //We only output the different value
    while(i<size1 && j<size2)
    {
        if(arr1[i]<arr2[j])
        {
            printf("%d,", arr1[i]);
            i++;
        }
        else if(arr1[i]>arr2[j])
        {
            printf("%d,", arr2[j]);
            j++;
        }
        else
        {
            //Skip the same value
            i++;
            j++;
        }
    }
    
    //Deal with the tails
    if(i!=size1)
    {
        for(;i<size1;i++)
            printf("%d,", arr1[i]);
    }
    else if(j!=size2)
    {
        for(;j<size2;j++)
            printf("%d,", arr2[j]);
    }
    
    return 0;
}

 

假如输入的数据没有排序,则先排序,O(nlogn)

假如数据已排好序,O(n)