异或运算:对于两个二进制数A和B,如果A和B的对应位有一个但不是两个为1,则结果为1,否则结果为0
1.将所有数异或起来,恰好能得到两个目标数的异或结果-result;
因为相同的数异或得到的结果必然是0,0异或任何数得到的都是本身;
2.找到result中的二进制为1的位置flag;
比如结果是6,那他的二进制就是110
因为第二位和第三位都是1,所以flag可以是2和3,我们任意取一个就可以,这里我取2;
3.根据flag的位置的数进行分组;
相同的数必然会分到一组,不相同的数必然会不在一组。
例如:现在有四个整数分别是4、4、3、5。4的二进制为100,
5的二进制为101,3的二进制为11,第二位为1的分为一组,即3为一组,不为1的为一组即4、4、5;
4.将两组的所有结果在全部异或起来,就可以得到两个目标数了。
第一组3:全部异或得到3
第二组4、4、5:全部异或得到5
所以目标值就是3和5