如何检查数组是否有任何重复?

Pet*_*fic 9 c arrays

我正在将文件的内容读入9元素数组.我需要检查这个数组中是否有任何重复项.我需要这样做而无需重新排序或更改数组的任何内容.

我该怎么做呢?

Cal*_*leb 14

使用蛮力.

你在数组中只有9个元素,因此只需要进行36次比较就可以找到任何重复的元素:

int count = sizeof(array) / sizeof(array[0]);

for (int i = 0; i < count - 1; i++) { // read comment by @nbro
    for (int j = i + 1; j < count; j++) {
        if (array[i] == array[j]) {
            // do whatever you do in case of a duplicate
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你所说的“sizeof(array)”当然是指“sizeof(array) / sizeof(array[0])”? (2认同)
  • @ AT-2017假设您有一个数组中的9个项目,并希望比较每对项目:从第一项开始,并将其与阵列中其他8项进行比较.到目前为止,这是8次比较.然后转到第二个.无需将其与第一个项目进行比较,您已经这样做了,因此请与其余7个项目进行比较.重复这个过程,你最终会得到8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 36比较.这就是上面的代码所做的. (2认同)
  • @jangorecki我可以,但是我会回答一个与OP提出的问题不同的问题,并且我们还有很多其他关于查找唯一元素、删除重复项等的C语言问题。事实上,如果您搜索问题用 [tag:c] 和 [tag:duplicates] 标记,你会发现(当我写这篇文章时)[113 个问题](/sf/ask/tagged/duplicates/+c)。最好的非暴力解决方案将取决于问题,例如:您是否只需要检测重复项,或将其删除,或创建一个新的唯一值数组?如果您有具体问题,请提出。 (2认同)