^运算的运用

//^运算:无进位相加,满足结合律与交换律

//例:整型数组中,只有一个数出现了奇数次,其余数出现了偶数次,求这个数
//例:整型数组中,只有两个数出现了偶数次,其余数出现了偶数次,求这两个数
public class Test1 {

public void one(int nums[]){
    int r = 0;
    for (int num : nums) {
        r ^= num;
    }
    System.out.println(r);
}


public void two(int[] nums){
    int r = 0;
    for (int num : nums) {
        r ^= num;
    }
    //若设这两个数分别为a,b,,则此时r==a^b;
    //a!=b,则r的某一位一定为1,找出r最右则为一的位,并以此为依据将数组中的数进行分类
    int q = r & (~r + 1);//取r最右侧的1
    int r1 = 0;
    for (int num : nums) {
        if ((num&q)==0){
            r1 ^= num;
        }
    }
    System.out.println(r1+"   "+(r^r1));
}

}


版权声明:本文为xxayy1314原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。