我遇到了一篇文章 如何在洗牌的连续整数数组中找到重复元素? 但后来意识到这对于许多输入都失败了。
例如:
arr[] = {601,602,603,604,605,605,606,607}
#include <stdio.h>
int main()
{
int arr[] = {2,3,4,5,5,7};
int i, dupe = 0;
for (i = 0; i < 6; i++) {
dupe = dupe ^ a[i] ^ i;
}
printf ("%d\n", dupe);
return 0;
}
如何修改此代码以便在所有情况下都可以找到重复元素?
原文由 Snehasish 发布,翻译遵循 CC BY-SA 4.0 许可协议
从原始问题:
它基本上说,该算法仅在您有连续整数时才有效, 从 1 开始,以某个 N 结尾。
如果要将其修改为更一般的情况,则必须执行以下操作:
在数组中找到最小值和最大值。然后计算预期输出(异或最小值和最大值之间的所有整数)。然后计算数组中所有元素的异或。然后对这两件事进行异或,你会得到一个输出。