先求异或和 最后结果为 这两个数字的x y 的异或x^y值
该值一定不为0 所以找到任意一个不为1的位数 则 x y在该位置一定不同 即一个为1 一个为0
只需将所有这个位置为1的在重新异或和 就能求出该值 (位置为0的也行)
class Solution {
public int[] findNumsAppearOnce(int[] nums) {
int sum = 0;
for(int x:nums)
sum ^= x;
int k = 0;
while((sum>>k&1)==0) k++;
int first = 0;
for(int x: nums)
if((x>>k&1)==1)
first ^= x;
int[] ans = {first, sum^first};
return ans;
}
}