在没有额外内存的情况下在数组中查找重复项,并且可以使用变量来存储值

时间:2017-09-09 03:19:32

标签: arrays algorithm data-structures

我们如何在数组中找到具有以下限制的重复元素:

  1. 不使用额外内存

  2. 可以使用变量来存储数据,而不是像HashMap / HashSet和 所有

  3. 时间复杂度可以是O(n),不应该是O(n ^ 2)

  4. 注意:

    这里的数组是动态整数数组。

2 个答案:

答案 0 :(得分:1)

如果数组的所有元素都在[0,n]之间,那么我们可以通过以下方式完成

  1. 将数组从i = 0遍历到n
  2. 对于每个元素a [i],假设

    如果a [i]> = 0,则

    x = a [i] 如果a [i] 检查是否[x]> = 0.如果是,则将-n添加到[x]

  3. 如果是另一个元素a [i]。如果a [x]< 0然后这意味着类似的值改变了索引,因此它是重复的。

答案 1 :(得分:0)

以下是我对上述问题的解决方案。

public static boolean checkDuplicates(int[] arr, int length) {
    int value = 0;
    boolean isDupFound = false;
    for (int i = 0; i < length; i++) {
        int currChar = arr[i];
        int bit_Position = currChar - 'a';
        if ((value & (1 << bit_Position)) > 0) {
            isDupFound = true;
            break;
        } else {
            value = value | (1 << bit_Position);
        }
    }
    return isDupFound;
}