一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.
1:如果要找出俩个数字不同,我个人认为:基于找出一个不同的数字出发
例如:我们要从1,2,1,2,5. 中找出不同
2:
我们要找俩个不同可以尝试把给定的数组分开成找一个不同
在分别来求不同
3:
实现
(1)第一步 先把所有的数先异或
//将整个数组异或起来[就比如1,2,3,4,5,1,2,3,4,6 我们可以得出这几个数异或起来等于5^6]
// 异或规则1^1=0 , 1^0=1
(2)第二步
//根据第一步的结果 我们来算5和6异或 并且找到他们二进制倒数第几位的不同 根据不同来分组
// 我们把倒数第二位为一的放在一起和把倒数第二位为零放在一起(这里的倒数是转化二进制的倒数第二位如:
![](https://i-blog.csdnimg.cn/blog_migrate/032d3f0e19cf2c0174d99d1dcd4a59e4.png)
这些分别为1,2,3,4的二进制有32个位只是省略了前面28位数)
// 这样可以保证5和6分开
(3)第三步
//分组(分在第几为数相同为1的数分在一起)