描述:
给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素
示例 :
输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。
图示分析:
![](https://i-blog.csdnimg.cn/blog_migrate/163d5de7f7a60c65e652109f62bc5e2d.png)
代码分析:
class Solution {
public int[] singleNumber(int[] nums) {
//所有数字相异或
int ret = 0;
for(int i = 0 ;i < nums.length ; i++)
{
ret ^=nums[i];
}
//找到任意一位为1的位
int m = 0;
while(m<32)
{
if((ret & (1<<m))>0)
{
break;
}
else
{
m++;
}
}
//分离
int n1 = 0,n2 = 0;
for(int i = 0;i<nums.length;i++)
{
//相与结果不为0的放入n1进行异或
if((nums[i] & (1<<m))>0)
{
n1 ^= nums[i];
}
//相与结果为0的放入n2进行异或
else
{
n2 ^= nums[i];
}
}
return new int[]{n1,n2};
}
}