int eor = 0;<br>for (int i = 0; i < arr.length; i++){<br> eor ^= a[i];<br>} //<b>得到 eor = x ^ y</b><br>int rightOne = eor & ((~eor) + 1);<br>int eorRight = 0;<br><br>for (int i = 0; i < a.length; i++) {<br> if (a[i] & rightOne != 0) {<br> eorRight ^= a[i];<br> }<br>}<br><br>x = eorRight<br>y = eor ^ eorRight<br><br>
找到x^y
已知x<>y, 则x和y一定在其中的一个位上不同,<br>一个为1,一个为0<br>
将数组中的数,依据2中找到的位,而分成两部分。<br>(其中一部分在某位为1,另一部分在某位为0)<br>对其中一部分异或找出其中一个数x<br>
子主题
y = x^y^x