Java教程

算法题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));
    }

 

这篇关于算法题1——&和^相关的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!