Algorithm 查找一个重复次数为偶数的数字,而所有其他数字重复次数为奇数

Algorithm 查找一个重复次数为偶数的数字,而所有其他数字重复次数为奇数,algorithm,Algorithm,给定的是一个整数数组。数组中的每个数字重复奇数次,但只有一个数字重复偶数次。找到那个号码 我在想一个散列图,每个元素的计数。它需要O(n)空间。有更好的方法吗?如果所有数字重复偶数次,而一个数字重复奇数次,如果您XOR所有数字,则可以找到奇数重复数 根据你目前的说法,我认为hashmap是个好主意,但我会考虑找到更好的方法。(对于正整数,我这样说。)您不需要保留每个元素被找到的次数——不管是偶数还是奇数——因此每个元素的1位都可以。每个元素从0开始,然后在遇到该元素时翻转相应的位。下次遇到它时,

给定的是一个整数数组。数组中的每个数字重复奇数次,但只有一个数字重复偶数次。找到那个号码


我在想一个散列图,每个元素的计数。它需要O(n)空间。有更好的方法吗?

如果所有数字重复偶数次,而一个数字重复奇数次,如果您
XOR
所有数字,则可以找到奇数重复数


根据你目前的说法,我认为hashmap是个好主意,但我会考虑找到更好的方法。(对于正整数,我这样说。)

您不需要保留每个元素被找到的次数——不管是偶数还是奇数——因此每个元素的1位都可以。每个元素从0开始,然后在遇到该元素时翻转相应的位。下次遇到它时,请再次翻转位。最后,只需检查哪一位是1。

哈希映射很好,但只需存储每个元素的计数模2即可。 除0(偶数)计数元素外,所有这些元素最终都将是1(奇数)


(正如Aleks G所说,你不需要使用算术(
count++%2
),只需要xor(
count^=0x1
);尽管任何编译器都会优化它。)

我不知道“repeat”的意思是什么,但是如果出现的(all-1)数字是偶数,对于只有一个数字的奇数出现,那么XOR应该可以做到这一点。

显然,在O(n)时间和O(1)空间中有一个解决方案,因为它是在一家软件工程师公司中明确提出的,具有此约束。请看这里:--对数组中的数字使用XOR似乎是可行的。祝你好运!:)

因为0是偶数,所以数组中会有无限多个偶数次的整数。考虑到这些数字在数组中,您只计算数组中存在的数字。正如您所说的数字应该有界,例如,如果一个数字是2^30,则应该有一个大小为2^30的列表,这是不好的(这是跳过列表和计数排序的想法,但它不能无限制地工作)。没错。只是将所有内容按位异或。你是有意回答不同的问题,还是误读了?@gsingh2011:不。这是关于语言的。出现N次的数字会重复N-1次。(第一次出现不是重复,第二次是重复)。不是向下投票者,但你把问题描述颠倒了。只有一个数字重复了偶数次,不是奇数。@Chris Mennie,我没有颠倒它,我说如果是这样的话,它可以用这种方式完成。但是对于当前的问题陈述,除了hashmap,我不知道,我在回答中提到了这一点。如果OP也有,我只是说这个来帮助他相反的情况。很公平,我同意你所说的。反问题更容易解决。显然,在O(n)时间和O(1)空间中有一个解决方案。请看这里:--使用XOR似乎是可行的。有什么想法吗?一直在思考,但到目前为止没有线索!!^@Myna,请将其作为答案发布!