C++关于两个数组求交集

将两个数组中的成对出现的元素放入第三个数组中;

例如1:a[] = {1,1,2,2,3,3};b[] = {1,1,2,2,3,3};我们想要的结果是{1,1,2,2,3,3};

例如2:a[] = {1,1,2,2,3,3};b[] = {1,1,3,3,3,};我们想要的结果为{1,1,3,3};

脑海中最先出现的暴力求解法,双重for循环应该是不可以的,第一个输出的应该是{1,1,1,1,2,2,2,2,2,3,3,3,3},所以我的想法是先把两个数组从低到高排好序,然后a[0]与b[0]比,若两者相同,则下标同时加一,如a[0]>b[0],则b的下标加一,反之,a的下标加一。直到超出两者任何一者的数组长度为止。

代码如下:

int main()
{
    int n1 = 6,n2 = 6;
    //输入的数组为从低到高排好序的,图省事,就不写排序了:)
    int a[n1] = {1,1,2,2,3,3};
    int b[n2] = {1,1,2,2,3,3};
    int *d = NULL;
    //n1,n2无所谓了,反正是交集
    d = new int [n1];
    int i = 0, j = 0, k = 0;
    while (i<n1&&j<n2)
    {
         if(a[i] == b[j])
         {
            d[k++] = a[i];
            i++;j++;//两者元素相同,则下标同时加一;
         }
         else if (a[i]>b[j])
            j++;
         else if (a[i]<b[j])
            i++;
    }
    cout<<k<<endl;
    for(i = 0;i<k;i++)
    {
        cout<<d[i]<<"\t";
    }
    delete [] d;
    return 0;
}

 

 输出结果,6是数组长度;

 4是数组长度,加一个hello是想说运行到这就结束了:)

萌新小白,虽然加入的时间很早,但之前都没怎么写过代码,也不知道有没有人发过类似的,就投着玩了。要是跟大佬写的重复了,在这说声对不起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值