一、位运算符的奇巧银技-(1)查找数组中唯一成对的树

139 阅读1分钟

1615552199(1).jpg

1.解题思路

根据位运算符的规律如下

 A^A=0
 B^0=B
 也就是相同数字异或结果为0,与0异或结果为本身,同理我们可以得出一个结论
 异或可以消除一个序列中重复的元素
 比如有一个[1,2,3,4,5,3,2,1,4]此数组异或结果
 1^2^3^4^5^3^2^1=0^5=5


 举例说明
 int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10,5},根据题目要求,找出5
 我们可以这样实现
 因为我们知道有十个序列也就是1-10,也可以认为是一个[1,2,3,4,5,6,7,8,9,10]的有序数组
 int[] arr2=new int[]{1,2,3,4,5,6,7,8,9,10}
 用arr和arr2作异或运算,便可以得到重复数字5
 

2.代码实现如下

public static void main(String[] args) {
    int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8};
    int x1 = 0;
    for (int i = 1; i <= 10; i++) {
        x1 = (x1 ^ i);
        System.out.println(x1);
    }

    System.out.println("===========================================");
    for (int i = 0; i < 11; i++) {
        x1=x1^arr[i];
    }
    System.out.println(x1);
}