Java 二进制中1 的个数,打印出现奇数次的数

二进制中 1 的个数

public static int bitOneCount(int num) {
    int count = 0;
    while(num != 0) {
        int rightOne = num & (~num + 1);
        count ++;
        num ^= rightOne;
    }
    return count;
}

打印数组中出现奇数次的数

public static void oddCount(int[] arr) {
    // 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数
    int len = arr.length;
    int eor = 0;
    for(int i = 0; i < len; i ++) {
        eor ^= arr[i];
    }
    // eor = a ^ b
    // eor != 0
    // eor 必然有一个位置上是 1
    int rightOne = eor & (~eor + 1); // 提取出最右侧的 1
    int onlyOne = 0; // eor'
    for(int i = 0; i < len; i ++) {
        if((arr[i] & rightOne) != 0) {
            onlyOne ^= arr[i];
        }
    }
    System.out.println(onlyOne + " " + (onlyOne ^ eor));
}

你可能感兴趣的:(java,开发语言,算法)