整理左神讲的,用于以后复习
N^0=N
N^N=0
获取右侧为1的第一个位置:int a = N & ((~N) + 1);
取得一个数组中,有两组数出现奇数次,求这两个数,数组如[12,12,12,12,13,13,13,13,14,14,14,21,21,21],最后的期望值应该为14,21
public static void main(String[] args) {//一组数,有两个数出现奇数次
int[] array = new int[]{12,12,12,12,13,13,13,13,14,14,14,21,21,21};
int eor = 0;
int tag = 0;
int num = 0;
for(int i=0;i<array.length;i++){
eor ^= array[i];
}
tag = eor & ((~eor) + 1);//右侧第一位1,说明异或前这个位置两个数当前位置一个为1,一个为0
//eor = 11011 (14^21)
//tag = 00001 (eor & ((~eor) + 1)) 01 0 00 0 10 11 1
//12 = 01100
//13 = 01101
//14 = 01110
//21 = 10101
for(int i=0;i<array.length;i++){
if((array[i] & tag) != 0){
//01100 &
//00001
//00000
num ^= array[i];
}
}
System.out.println(num + "," + (eor ^ num));
}
以上是 整理左神讲的,用于以后复习 的全部内容, 来源链接: utcz.com/z/516694.html