class Solution {
public int[] singleNumbers(int[] nums) {
int xor = 0;
//相同的值异或为0,剩余的xor值为两个不同值的异或值
for(int i = 0;i<nums.length;i++){
xor^=nums[i];
}
int k = 1;
//取出异或结果的最右侧的1(k),即取出 两个不同值的二进制中不同的最低位置;
while((xor&k)==0){
k<<=1;
}
int[] res = new int[2];
for(int i = 0;i<nums.length;i++){
if((k&nums[i])==0){//必须为等于0
res[0] ^= nums[i];
}else{
res[1] ^= nums[i];
}
}
return res;
}
}