找唯一成对的数

版权声明:本文为博主原创文章,未经博主允许不得转载。 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(']');
	}
}

猜你喜欢

转载自blog.csdn.net/Caiaixiong/article/details/83961193