1. 程式人生 > >找唯一成對的數

找唯一成對的數

題目

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(']');
	}
}