位运算之找到重复的数

/**

* 题目:1-100 放在大小为101的数组中,

* 只有一个可重复元素,每个数组元素只能访问一次

* 且不借助辅助空间,请把重复的数找出来。

* tip:a^a = 0; a^0 = a

*

*/

public static void main(String[] args) {

final int N = 101;

int[] a = new int[N];

for(int i = 0; i < N-1; i++) {

a[i] = i+1;

}

a[N-1] = (int)(1 + Math.random()*(N-1));

//插入到任意位置

int randomIndex = (int)(Math.random()*N);

int temp = a[N-1];

a[N-1] = a[randomIndex];

a[randomIndex] = temp;

for(int i = 0; i < N; i++) {

System.out.print(a[i]+" ");

}

//以上为生成题目要求的数组

int x1 = 0;

for(int i = 1; i <= N-1; i++) {

x1 = (x1^i);

}

for(int i = 0; i < N; i++) {

x1 = (x1^a[i]);

}

System.out.println();

System.out.println(x1);

}

你可能感兴趣的:(位运算之找到重复的数)