发现没有额外的内存数组复制,并且可以使用变量用于存储值

问题描述 投票:3回答:2

我们怎样才能找到具有以下限制数组重复的元素:

  1. 如果不使用额外的内存
  2. 可以使用变量用于存储数据和喜欢的HashMap / HashSet的,所有不是对象。
  3. 时间复杂度可以是O(n)和不应该为O(n ^ 2)

注意 :

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

arrays algorithm data-structures
2个回答
1
投票

如果阵列中的所有元素都在[0,N)之间,那么我们可以以下面的方式做到这一点

  1. 导线阵列从i = 0到n
  2. 对于每一个元素[I],假设 X = A [1],如果[I]> = 0 X = A [1] + N如果[I] <0 检查,如果[X]> = 0。如果是,则添加-n至[X]
  3. 如果用于另一元件的[i]中。如果[X] <0,则这意味着,类似的值改变了索引因此它是一个重复的。

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.