我是C ++的新手,我要做的是编写一种方法来检查2D数组是否包含任何重复项。
例如,我有一个matrix[3][4]
,我已经能够将第一个元素[0][0]
与其余元素进行比较,直到最后一个[2][3]
。
问题是我不知道如何进行,我应该做的是该方法然后将元素[0][1]
与其余元素(当然除了前一个元素及其本身)进行比较等等。>
答案 0 :(得分:0)
首先,在这种情况下,它是2D数组无关紧要;您想在整个数组中查找重复项,因此无论如何还是最好使用一维索引。巧合的是,这是在C ++中处理二维数组的一种建议方法。
因此,假设您可以按某种顺序放置索引,通常的想法是检查所有具有后续元素的元素。这将为您提供 O(n 2 )。毫无疑问,伪代码是两个循环,并且是例如用于碰撞检测:
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
}
}
在2D数组的情况下,*iterA
取消引用可以用将复合一维索引分解为两个部分(例如,与i % width, i / width
。再次,这是一个非常常见的模式。
话虽这么说,为什么要打扰?制作一个std::set
,开始一个接一个地放置元素,并在每次插入之前调用find
。如果find
返回某些内容,请中断。