将两个数组中的成对出现的元素放入第三个数组中;
例如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是想说运行到这就结束了:)
萌新小白,虽然加入的时间很早,但之前都没怎么写过代码,也不知道有没有人发过类似的,就投着玩了。要是跟大佬写的重复了,在这说声对不起