版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Caiaixiong/article/details/83961193
题目
1~10这10个数放到大小为11的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法将它找出来,要求不使用辅助存储空间。
import java.util.Random;
public class Main {
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;
}
//最后一个数从1-10随机生成
arr[arr.length-1] = new Random().nextInt(n-1)+1;
//模拟随机性,将最后一个数与前面的其中一个交换
int index = new Random().nextInt(n);
swap(arr, index, arr.length-1);
print_array(arr);
/**
* 筛选成对的数
*/
int temp = 0;
for (int i = 1; i < arr.length; i++) {
temp = temp ^ i;
}
for (int i = 0; i < arr.length; i++) {
temp = temp ^ arr[i];
}
System.out.println(temp);
}
public static void swap(int arr[],int index_1,int index_2){
arr[index_1] = arr[index_1]^arr[index_2];
arr[index_2] = arr[index_1]^arr[index_2];
arr[index_1] = arr[index_1]^arr[index_2];
}
public static void print_array(int arr[]){
System.out.print('[');
for (int i = 0; i < arr.length; i++) {
if(i+1!=arr.length){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]);
}
}
System.out.println(']');
}
}