给定一个整数数组。 数组中的每个数字重复出现奇数次,但只有1个数字重复出现偶数次。 找到那个数字。
我考虑使用哈希映射,记录每个元素的计数。这需要O(n)空间。是否有更好的方法?
我考虑使用哈希映射,记录每个元素的计数。这需要O(n)空间。是否有更好的方法?
您不需要保留每个元素出现的次数 - 只需要知道它出现的次数是偶数还是奇数 - 所以每个元素只需要1位。对于每个元素,一开始都是0,当遇到该元素时,将相应的位翻转。下次遇到它时,再次翻转该位。最后,只需检查哪个位是1。
我不知道“repeat”这个词的意思,但如果有(all-1)个数字出现了偶数次,只有一个数字出现了奇数次,那么XOR就可以解决问题。
如果所有数字都重复偶数次,只有一个数字重复了奇数次,那么如果你对所有数字进行XOR
运算,就能找到重复奇数次的数字。
根据您目前的陈述,我认为哈希表是一个好主意,但我会思考一下以找到更好的方法。(这是针对正整数的)
显然,有一个O(n)时间和O(1)空间的解决方案,因为这是在一个软件工程师公司明确提出的限制条件。请参见此处:Bing面试问题 -- 看起来可以使用数组中的数字进行异或运算来完成。祝你好运!:)