题目:找出重复的数
把1~1000共计1000个数放入一个长度为1001的数组中,同时再放入一个重复的数b,这个数组中有且只有一个重复的数,如何找出这个重复的数?
思路:
异或运算:^
A^A=0
B^0=0
当有多个^运算时,可以交换位置。
这个时候我们就可以想到再创造一个拥有1~1000的数组,将这两个数组的每一个元素进行^运算,由于重复的数b一共进行了2次 ^运算(b ^b ^b=b),而其他的元素只进行了一次 ^运算,最终运算的结果就是重复的数b
题解:
package test;
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main(String[] args) {
int N = 11;
int arr[] = new int[N];
//有重复的数组
for (int i = 0; i < N-1 ; i++) {
arr[i] = i+1;
}
arr[arr.length-1]=new Random().nextInt(N)+1;
//数组2,不重复的数组
int arr1[] = new int[N];
for (int i = 0; i < N ; i++) {
arr1[i] = i;
}
//将这个重复的元素随机的插入到数组中的某处
int index = new Random().nextInt(N);
swap(arr,index,arr.length-1);
System.out.println(Arrays.toString(arr));
int x = 0;
for (int i = 0; i < N; i++) {
x = x^arr1[i]^arr[i];
}
System.out.print(x);
}
public static void swap(int[] data,int a,int b){
int temp=data[a];
data[a]=data[b];
data[b]=temp;
}
}