题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路分析:
1.将数组里面的所有数进行异或,最终异或出来的结果就是两个只出现一次的数字的异或值
2.异或后位为1说明当前位两位异或数字位有一位是1,一位是0,所以只需要取出一位进行判断即可
ret&=(-ret)可以取出最右边异或为1的位
3.通过&运算将两个数区分
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
int ret=0;
for(int x:array){
ret^=x;
}
ret&=(-ret);
for(int x:array){
if((x&ret)==0){
num1[0]^=x;
}else{
num2[0]^=x;
}
}
}
}