leetcode260_singlenumberIII

思路:所有🌲异或完后只剩下两个数的异或,把每个数理解为二进制数,在异或的结果上的每一个1的位置,两个素
总过出现的情况只能是0和1,如果都是0或都是1就不可能, 所有可以将异或结果和每个数二次异或分成两组,
每一个组必然包含单独一个数,异或就可以求出结果;
核心代码:
diff &= -diff; //取最高位的1,任意一个1就可以,注意diff是所有数异或以后的结果
//second pass:
for(int num: nums){
if(num&diff == 0){
a ^= num;
else{
b ^= num;
}
}
return {a, b};
}