1、异或
运算法制:相同则取0,不同则取1
一个数与0做异或,则还是这个数本身;
2、题目
3、题解
class Solution {
public int[] singleNumbers(int[] nums) {
int x=0,y=0,n1=0,m=1;
//第一遍遍历异或得到所求x,y的异或值
for(int num:nums){
n1= n1^num;
}
//m循环移位做与,得到第一个为1的二进制位
while((n1&m) == 0){
//注意:== !=的运算优先级是大于位运算符的
m= m<<1;
}
for(int num:nums){
if((num&m) == 0){
//注意是与运算,不是异或运算,与运算能区分出该位是否为0,进行分组
x=x^num;
}else{
y= y^num;
}
}
return new int [] {x,y};
}
}