整理左神讲的,用于以后复习

编程

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

回到顶部