C 查找数组中的重复元素
有一个大小为n的数组,数组中包含的元素介于1和n-1之间,因此每个元素出现一次,只有一个元素出现多次。我们需要找到这个元素 虽然这是一个非常常见的问题,但我仍然没有找到正确的答案。大多数建议是,我应该将数组中的所有元素相加,然后从中减去所有索引的总和,但如果元素的数量非常大,这将不起作用。它会溢出来的。还有一些关于使用异或门的建议,我不清楚 我提出了这个算法,它是加法算法的一个增强,将在很大程度上减少溢出的机会C 查找数组中的重复元素,c,arrays,algorithm,complexity-theory,big-o,C,Arrays,Algorithm,Complexity Theory,Big O,有一个大小为n的数组,数组中包含的元素介于1和n-1之间,因此每个元素出现一次,只有一个元素出现多次。我们需要找到这个元素 虽然这是一个非常常见的问题,但我仍然没有找到正确的答案。大多数建议是,我应该将数组中的所有元素相加,然后从中减去所有索引的总和,但如果元素的数量非常大,这将不起作用。它会溢出来的。还有一些关于使用异或门的建议,我不清楚 我提出了这个算法,它是加法算法的一个增强,将在很大程度上减少溢出的机会 for i=0 to n-1 begin : diff = A[i] -
for i=0 to n-1
begin :
diff = A[i] - i;
sum = sum + diff;
end
diff
包含重复元素,但使用此方法无法找到重复元素的索引。为此,我需要再次遍历数组,这是不可取的。有谁能想出一个不涉及加法或XOR方法的更好的解决方案吗?根据问题描述的约束条件,您可以用很多方法来思考这个问题
如果您知道只有一个元素被复制了,那么有很多方法可以解决这个问题。一个特别聪明的解决方案是使用按位异或运算符。XOR具有以下有趣的特性: