1. 程式人生 > 其它 >演算法題1——&和^相關

演算法題1——&和^相關

一、一個數組中包含一種數出現了奇數次,其他的數都出現了偶數次,找出這個出現了奇數次的數。

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 3, 1};
        int eor = 0;
        for (int i : arr) {
            eor ^= i;
        }
        System.out.println(eor);
    }

二、一個數組中包含兩種數出現了奇數次,其他的數都出現了偶數次,找出這兩個出現了奇數次的數。

    public
static void main(String[] args) { int[] arr = {1, 3, 5, 3, 1, 4};//為了取出a和b,這個數組裡面的4和5 int eor = 0, rightOne; for (int i : arr) { eor ^= i; } //eor = a ^ b //eor != 0 //eor必然有一個位置上是1 rightOne = eor & (~eor + 1);//提取出最右邊的1,就是a和b從右開始第一次分別是0和1的時候
int onlyOne = 0; for (int i : arr) { if ((i & rightOne) == 1) {// onlyOne ^= i; } } System.out.println(onlyOne + " " + (eor ^ onlyOne)); }