一、位运算的奇巧淫技

题1:找出唯一成对的数

1~1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?

import java.util.Random;

public class 唯一成对的数 {
    public static void main(String[] args) {
        int N = 11; //可以是101,1001,...
        int[] arr = new int[N];

//        数组中依次放入数字1~10
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = i + 1;
        }
//        最后一个数设置为随机数,注:Random().nextInt(100)为0~99之间的随机整数
        arr[arr.length - 1] = new Random().nextInt(N - 1) + 1;
//        输出显示
        for (int i = 0; i <= arr.length - 1; i++) {
            System.out.print(arr[i] + " ");
        }

//        0^0=0  0^1=1  1^1=0
//        1到10经过和本身的异或,会消除掉。剩下重复的数字
        int x1 = 0;
        for (int i = 1; i <= N - 1; i++) {
            x1 = x1 ^ i;
        }
        for (int i = 0; i <= N - 1; i++) {
            x1 = x1 ^ arr[i];
        }
        System.out.println();
        System.out.print("重复的数字是" + x1);

    }
}

 

  

 

posted @ 2021-08-11 17:51  呓语程序缘  阅读(60)  评论(0)    收藏  举报