gpt4 book ai didi

c - 如何使用 XOR 查找数组中出现次数为奇数的单个元素?

转载 作者:行者123 更新时间:2023-12-04 10:36:54 27 4
gpt4 key购买 nike

考虑这个问题:

You are given an array containing positive integers. All the integers occur even number of times except one. Find this special integer.

解决方法:

出现次数为奇数的整数将有 0 对或多对和一个单数。所以,如果我们能找到摆脱所有对的方法,那么我们剩下的就是单个数字。现在,什么摆脱了对?提示:想想一个运算符。

XOR 可以解决问题。它为您提供了没有额外内存的 O(n) 解决方案。

int GetSpecialOne(int[] array, int length)
{
int specialOne = array[0];

for (int i=1; i < length; i++)
{
specialOne ^= array[i];
}

return specialOne;
}

我不明白如何通过累加每个元素的 XOR 来减少数组产生特殊整数。它是如何工作的?

最佳答案

之所以有效,是因为 (N xor Q) xor Q = N。

恰好一个整数出现奇数次,因此它将是唯一没有从列表中“消失”的数字。所有其他数字出现的次数都是偶数,所以它们都以 2 为一组出现(可以想象),所以它们都“消失”了。此外,XOR 之间的“距离”无关紧要:(((N xor Z) xor Q) xor Z) xor Q = N。即使在对之间存在中间 XOR,Z 和 Q 也会“抵消” .

关于c - 如何使用 XOR 查找数组中出现次数为奇数的单个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com