给定是一个整数数组。阵列中的每个数字重复ODD次数,但偶数只重复1个数字。找到那个号码。
我在考虑一个哈希映射,每个元素的计数。它需要O(n)空间。还有更好的方法吗?
答案 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而不是数字似乎是可行的。祝好运 ! :)