找出唯一成对的数字
题目:
1-1000这1000个数放在含有1001个元素的数组里,只有唯一一个数字在这个数组中重复了,其他的数字都只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助空间,能否设计一个算法实现?
分析:利用异或(^)运算解题。两个相同的数字异或得到的结果为0,若将这个数组的所有元素与1~1000这1000个数进行异或运算,结果就是重复的那个数。
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;
public class T1 {
public static void main(String[] args){
int N=11;
int[] arr = new int[N];
for(int i=0;i<arr.length-1;i++)
{
arr[i]=i+1;
}
//last number
arr[arr.length-1] = new Random().nextInt(N-1)+1;
int index = new Random().nextInt(N);
int t=arr[arr.length-1];
arr[arr.length-1]=arr[index];
arr[index]=t;
System.out.println(Arrays.toString(arr));
int x1=0;
for(int i=1;i<=N-1;i++){
x1=x1^i;
}
for(int i=0;i<N;i++){
x1=arr[i]^x1;
}
System.out.println(x1);
}
}