寻找一个甚至没有重复所有其他数字重复奇数次数的数字

时间:2011-09-03 11:58:29

标签: algorithm

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

我在考虑一个哈希映射,每个元素的计数。它需要O(n)空间。还有更好的方法吗?

5 个答案:

答案 0 :(得分:3)

你不需要保持每个元素被找到的次数 - 只是它是偶数还是奇数 - 所以你应该对每个元素保持1位。每个元素从0开始,然后在遇到元素时翻转相应的位。下次遇到它时,再次翻转一下。最后,只需检查哪个位为1。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

我不知道“重复”的意图是什么,但是如果偶数次出现(全-1)数字,并且出现奇数次数<强>只有一个数字,那么XOR就可以做到这一点。

答案 3 :(得分:1)

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

根据您当前的陈述,我认为hashmap是个好主意,但我会考虑找到更好的方法。 (我说的是正整数。)

答案 4 :(得分:0)

显然在O(n)时间和O(1)空间中存在解决方案,因为在软件工程师公司中明确地询问了这种约束。请参见此处:Bing interview question - 在数组中使用XOR而不是数字似乎是可行的。祝好运 ! :)