找出一组唯一值是否具有重复值的最快方法

时间:2014-11-26 10:45:04

标签: computer-science

如果我有一个n长度唯一值的数组,除了一个重复的值,找到它的最快方法是什么?

e.g。 [1,2,3,4,4,10,15,12]最快找到它的方法4.可能有数百万个数组元素。

3 个答案:

答案 0 :(得分:1)

如果您有可能使用数据结构,则可以在CONSTANT时间内完成。即大约O(1)。那是使用HashMap。 (当我们处理数百万的数字时)

你也可以使用一个单独的数组说(Dummy),大小为max(数组中存在的元素),然后继续将元素放在Dummy [element]中,无论你在哪里找到元素已经存在,你都可以实现所需的结果。它也需要O(n)复杂度。

答案 1 :(得分:1)

你必须逐个浏览数组的所有元素。如果没有更多信息,则无法在不触及每个元素至少一次的情况下找到重复元素。这至少是O(N),你不能走得更快。

如果重复的元素是连续的,例如[1,2,2,3],你可以一个接一个地将它与前一个元素进行比较;如果它们相等,你就找到了你的元素:

for (int i = 1; i < count; i++) {
  if (arr[i] == arr[i-1]) {
    std::cout << "found " << arr[i] << " at " << i << " and " << (i-1) << std::endl;
    break;
  }
}

如果重复的元素不连续,您可以使用数据结构来跟踪现有元素。当您找到一个已经看过的元素时,您会通知该元素:

initialize set to empty set;
for (i = 0; i < count; i++) {
  if (arr[i] is in set) {
    inform arr[i] as repeated element at position i;
    break;
  } else {
    add arr[i] to set;
  }
}

答案 2 :(得分:0)

如果副本处于一个完全随机的位置,我无论如何都要看到1对1检查,直到你找到副本,此时你显然会停止。

相关问题