找唯一成對的數
阿新 • • 發佈:2018-12-20
題目
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(']'); } }