gpt4 book ai didi

c++ - 这个数组交集的实现是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 04:42:05 30 4
gpt4 key购买 nike

此代码查找两个未排序数组的交集。

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 行实际上要做什么?

最佳答案

3:可以这样写的更清楚一点:

for (int i = 0; i < m; i++) {
int value1 = arr1[i];
int currentCount = mapp[value1];
mapp[value1] = currentCount + 1;
}

这使得它易于解释。将 arr1 的所有值作为键存储在 mapp 中,并在每次遇到相同值时将其值递增 1。这里我们假设任何值都应始终从 0 开始。

4:同样,我们将重写它以使其变得更加清晰:

for (int i = 0; i < n; i++) {
int value2 = arr2[i];
int currentCount = mapp[value2];
if (currentCount > 0) {
mapp[value2] = currentCount - 1;
cout << value2 << endl;
}
}

if 语句中,我们试图找到一个已经存在于 mapp 中的值。再次假设值默认为 0:我们将跳过第一个数组中未找到的任何值。如果找到,它的计数将大于 0,我们在 if 中继续。

5:前面的例子包含重写

所以我们只在 arr1arr2 中存在 key 时才输入 if。如果是这种情况,我们只需将计数器减 1,这样每次两个数组中的值都只显示一次。

关于c++ - 这个数组交集的实现是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58905556/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com