【问题标题】:Compare each element of a 2D array with the rest C++将 2D 数组的每个元素与其余的 C++ 进行比较
【发布时间】:2018-10-26 09:19:19
【问题描述】:

我是 C++ 新手,我要做的是编写一个方法来检查 2D 数组是否包含任何重复项。

例如,我有一个matrix[3][4],我能够将第一个元素[0][0] 与其余元素进行比较,直到最后一个元素[2][3]。 问题是我不知道如何继续,我应该做的是该方法然后将元素 [0][1] 与其余元素进行比较(当然除了前一个元素和它本身)等等。

【问题讨论】:

标签: c++ arrays matrix


【解决方案1】:

首先,它是一个 2D 数组这一事实在这种情况下是无关紧要的;您想在整个数组中查找重复项,因此无论如何您最好使用一维索引。巧合的是,这是在 C++ 中处理二维数组的建议方法。

所以假设你可以按某种顺序排列索引,一般的想法是检查所有后续元素的每个元素。这将为您提供 O(n2)。毫无疑问,伪代码是两个循环,并且是常用的模式,例如用于碰撞检测:

for (iterA = 0; iterA < num - 1; iterA++) {
    for (iterB = iterA + 1; iterB < num; iterB++) { // note how iterB starts one further
        if (*iterA == *iterB)
            return true; // found a duplicate
    }
}

在二维数组的情况下,*iterA 取消引用可以替换为将复合一维索引分解为两个组件的函数,例如与i % width, i / width。这又是一种非常常见的模式。

话虽如此,何必呢?创建一个std::set,开始一个接一个地放置元素并在每次插入之前调用find。如果find 有返回值,就中断。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多