算法1:找出唯一成对的数:1-10这10个数放在含11个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次,每个数组元素只能访问一次,设计一个算法,将它找出来跑品,不用辅助存储空间,能否设计一个算法实现?
思路:因为相同的两个数异或为0,可以消去,所以再多拿相同是数来异或,所以单独的数变为两个,重复的数变为三个,因此
再消去其中一个,剩下的最终的一个就是我们要找的那个重复的数
代码实现如下:
public class DayOne {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=10;
int[] arr = new int[11];
for(int i=0;i<arr.length-1;i++) {
arr[i] = i+1;
}
arr[arr.length-1] = (int) (Math.random()*10+1);//最后一个数(重复的)
//这里的注释的交换可能是为了让数组 更好看一些?
// int index = (int) (Math.random()*9+1);//随机下标
// int temp = arr[arr.length-1];
// arr[arr.length-1] = arr[index];
// arr[index] = temp;
//
for (int i= 0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
int x = 0;
for(int i=1;i<arr.length;i++) {
x = (x^i);
System.out.print(x);
}
System.out.println();
for(int i=0;i<arr.length;i++) {
x = x^arr[i];
System.out.print(x);//异或到最后剩下的那个数,就是重复的那个数
}
System.out.println();
System.out.println(x);
}
}