编程语言
首页 > 编程语言> > 算法题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));
    }

 

标签:arr,rightOne,int,eor,算法,数次,onlyOne,相关
来源: https://www.cnblogs.com/zhangzhongkun/p/16171696.html