数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。
分析
对于一个数组中, 如果只有一个数字出现一次, 而其他所以数字出现两次, 则可以通过a[i] ^ a[i + 1]异或所有元素, 而由于x ^ x == 0, 所以可得这个元素;
对于数组中有两个元素只出现了一次, 分析可知当异或了整个数组元素之后, 结果即为x ^ y.(x, y即是两个出现了一次的元素)
可以通过添加一个mask: x与y某一位不同的而创建的数字. 通过mask可以把数组分为两个部分, 分组标准即为与mask异或是否为0.
如此,相同的数肯定在一个组,因为相同数字所有位都相同,而不同的数,肯定不在一组。然后把这两个组按照最开始的思路,依次异或,剩余的两个结果就是这两个只出现一次的数字。
代码
1 | public class Solution { |