位运算_数组中的重复元素
问题:
一列数组中有一个元素重复出现了两次,且不知道他的位置,其他元素均只出现一次,设计算法,在每个数组元素只访问一次的情况下将它找出来
思路:
用异或进行比对x=x ^ i ^ a[i],i在循环中与数组的个数相同,但i和x均从0开始,也就是两组数的相互对应,而重复的元素出现了三次,最后的x值即为重复元素
public class 数组重复数 {
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;
}//给数组赋值,最后一位留空赋予随机数
arr[arr.length-1]=new Random().nextInt(N-1)+1;//生成N以内的随机数
int index=new Random().nextInt(N);//生成一个随机下标
//将随机下标与随机数的位置进行调换
int temp;
temp=arr[index];
arr[index]=arr[arr.length-1];
arr[arr.length-1]=temp;
for(int j:arr){
System.out.print(j+" ");
}
System.out.println();
int x1=0;
for (int i = 0; i < N; i++) {
x1=x1^i^arr[i];//主要在这一行,搞明白异或运算符很好理解的
}
System.out.println(x1);
}
}