一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路分析:
利用异或来进行解决,出现两次的数字,两次异或的结果为0,进行一遍循环之后得到的结果为两个只出现一次的数字异或的结果;然后,判断出异或结果为1的位置,得到标志位;最后,将标志位与数组里面的数进行异或,进行判断就可以得出只出现一次的两个数。
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
if(array==null||array.length<2)
return;
int xor=0;
int flag=1;
for(int i=0;i<array.length;i++)
{
xor^=array[i];
}
while((xor&flag)==0)
{
flag<<=1;
}
for(int i=0;i<array.length;i++)
{
if((flag&array[i])==0)
{
num2[0]^=array[i];
}else
{
num1[0]^=array[i];
}
}
}
}