参考回答:
位运算题目,
位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。
public static int find1From2(int[] a){int len = a.length, res = 0;for(int i = 0; i < len; i++){res = res ^ a[i];}return res;}扩展:
public static int find1From3(int[] a){int[] bits = new int[32];int len = a.length;for(int i = 0; i < len; i++){for(int j = 0; j < 32; j++){bits[j] = bits[j] + ( (a[i]>>>j) & 1);}}int res = 0;for(int i = 0; i < 32; i++){if(bits[i] % 3 !=0){res = res | (1 << i);}}return res;}



