【问题标题】:Compare two arrays and replace elements without duplicating - c++比较两个数组并替换元素而不重复 - c++
【发布时间】:2015-10-16 12:04:53
【问题描述】:

我似乎无法弄清楚如何比较 C++ 中的两个数组 myArray1 和 myArray2,并将 myArray1 中的零替换为 myArray2 中的元素而不复制任何数字。本质上,我想用 1 和 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]

任何帮助都会很棒,如果这是一个重复的问题,我们很抱歉。

【问题讨论】:

  • myArray2 里面会有零吗?
  • 你说的没有重复和数字是什么意思? myArray1 不能有重复或者你不能使用相同的数字从myArray2 填充它?
  • 对我来说好像是作业...
  • 这看起来很简单。如果目标元素为零,只需复制相应的元素。我在这里缺少什么吗?
  • 这两个数组只是简短的示例,因此我可以弄清楚它的编码方面。每个数组可以按任意顺序排列,myArray2 中永远不会有零......

标签: c++ arrays compare


【解决方案1】:

据我了解,这可能是解决方案:

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;
}

【讨论】:

    【解决方案2】:

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

    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;
    

    【讨论】:

      【解决方案3】:

      天真的解决方案是循环 myArray1 以找到零,当找到一个时循环 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多