两个阵列联合的蛮力方法



我想用蛮力找到两个数组的并集 理论上它应该可以工作,但由于某种原因,只有第一个数组进入第三个数组(第三个数组用于存储数组 1 和数组 2 中的元素) 第 3 个阵列的大小从 8 个增加到 12

//find the union of two arrays
#include<iostream>
#include<vector>
using namespace std;
void uniarr(vector<int> &arr1, vector<int> &arr2)
{
int n=arr1.size();
int m=arr2.size();
vector<int> arr3(n+m);
cout<<" arr "<<arr3.size()<<endl;
int count=1;

for (int i = 0; i < n; i++)
{   count=1;

for (int  j = 0; j < arr2.size(); j++)
{
if(arr1[i]==arr2[j])
{   
if(count==1)
{
arr3.push_back(arr1[i]);
count++;
}
arr2.erase(arr2.begin()+j);
j=j-1;
}   
}
if(count==1)
{
arr3.push_back(arr1[i]);
}
}
cout<<" arr "<<arr3.size()<<endl;
for (int i = 0; i < arr3.size(); i++)
{
cout<<" "<<arr3.at(i);
}
}
int main()
{   
system("cls");
vector<int> arr1={3,1,4,6};
vector<int> arr2={1,2,5,4};
uniarr(arr1,arr2);
return 0;
}

您有 2 个问题:

  • 首先,初始化arr3

    std::vector<int> arr3(n+m); // create a vector of SIZE n+m (with value 0)
    

    它应该是

    std::vector<int> arr3;
    arr3.reserve(std::min(n, m)); // "optimization" to avoid future allocation
    
  • 第二个是你的最后一个

    if(count==1)
    {
    arr3.push_back(arr1[i]);
    }
    

    它从arr2中找不到的arr1元素中添加arr3元素。 您应该删除它。

    演示

我需要添加额外的 for 循环来添加 arr2 元素

原因:从 arr1 添加元素并删除 arr2 中的公共元素后 ARR2 中只保留唯一元素

此外,我需要为 arr3 保留空间,而不是分配 n+m

最新更新