比较两个数组并替换不重复的元素- c++

Compare two arrays and replace elements without duplicating - c++

本文关键字:元素 c++ 替换 数组 两个 比较      更新时间:2023-10-16

我似乎不知道如何比较两个数组在c++中,myArray1 &myArray2,并将myArray1中的零替换为myArray2中的元素,而不重复任何数字。本质上,我想用1来替换这两个0;3 -以任何顺序....

int myArray1[4] = [0,2,0,4]
int myArray2[4] = [1,2,3,4]

我希望输出为:

myArray1[4] = [1,2,3,4] -or- [3,2,1,4]

如果这是一个重复的问题,我很抱歉。

根据我的理解,这可能是解决方案:

int main(){
int myArray1[4] = {0,2,0,4};
int myArray2[4] = {1,2,3,4};
for (int i = 0; i < 4; i ++)
{
    for (int j = i; j <4 ; j++) {
        if (myArray1[i] == 0) {
            myArray1[i] = myArray2[j];
        }
    }
}
for(int i = 0;i<4;++i){
    cout<<myArray1[i]<<" ";
}

return 0;
}

您的任务可以通过集合操作来解决:

const size_t N = 4;
int a[N] = {0,2,0,4};
int b[N] = {1,2,3,4};
int r[N] = {};
{
    std::sort(a, a+N);
    std::sort(b, b+N);
    // invariant: the a set must be in the b set
    std::set_union(a, std::remove(a, a+N, 0), b, b+N, r);
}
for(size_t i = 0; i < N; ++i)
    std::cout << i << ":" << r[i] << std::endl;

朴素的解决方案是遍历myArray1以找到0,当找到1时,遍历myArray2以找到myArray1中不存在的第一个元素(这将在另一个嵌套循环中完成)。

那么你将有三个循环,每个循环嵌套在另一个循环中。

在伪代码

for each value1 in myArray1:
    if value1 = 0:
        for each value2 in myArray2:
            // Check that the value from myArray2 doesn't exist in myArray1
            found = false
            for each tempValue1 in myArray1:
                if value2 = tempValue1:
                    found = true  // Found a duplicate
                    break out of loop
            if not found:
                value1 = value2
                break out of loop