如何在数组中查找重复项。在反问题的情况下,当您必须找到所有的唯一元素时,您只需清除所有元素,结果我们获得一个唯一元素。例如
int a[] = {2, 2, 3, 3, 4, 5, 5, 16, 16};
int res = a[0];
for(int i = 0; i < 9; ++i)
res ^= a[i];
例如给定一个数组
int a[] = {2, 4, 7, 8, 4, 5};
这里副本是4,但不清楚如何找到数组的重复元素。
答案 0 :(得分:4)
您正在描述Element Distinctness Problem。
没有额外的空间(和散列),元素清晰度问题没有O(n)
解决方案,因此您无法修改此问题的“xor算法重复”。
此问题的解决方案是:
O(nlogn)
时间。答案 1 :(得分:0)
我们可以使用以下算法在0(n)时间内找到数组中的重复项。
traverse the list for i= 0 to n-1 elements
{
//check for sign of A[abs(A[i])] ;
if positive then
make it negative by A[abs(A[i])]=-A[abs(A[i])];
else // i.e., A[abs(A[i])] is negative
this element (ith element of list) is a repetition
}
希望它有所帮助!
答案 2 :(得分:-1)
一种解决方案可以是构建Hashset。它如下 -
1. Initialize an empty hashset.
2. For each element in array,
a. Check if it is present in the hashset.
If yes, you found the duplicate
If not, add it to the hashset.
这样你就可以找到数组中的所有重复项。
空间复杂度:O(n);时间复杂度:O(n)