【发布时间】:2020-03-13 06:59:03
【问题描述】:
此代码查找两个未排序数组的交集。
void intersection(int arr1[],int m,int arr2[],int n) //where m=size of arr1 and n=size of arr2
{
map<int,int>mapp;
for(int i=0;i<m;i++)
mapp[arr1[i]]++; //3
for(int i=0;i<n;i++)
{
if(mapp[arr2[i]] >0) //4
{
mapp[arr2[i]]--; //5
cout<<arr2[i] <<endl;
}
}
}
它实际上在第 3、4 和 5 行尝试做什么?
【问题讨论】:
-
所有这三个都使用存储在各自数组中的值作为将值关联到计数器的映射的键。请注意,如果
m < n成立,则此代码是未定义行为 的潜在路径,因为在//4中使用了arr1[i]。 -
这些行的作用无关紧要。之前的评论稍微提到了一点,但是根据参数的描述,以及这个函数的目的,很明显,显示的逻辑存在根本性的缺陷,并且无法产生正确的结果。
标签: c++ arrays algorithm stl intersection