題目來源:藍橋云課
不用輔助儲存空間
?import java.util.Random;public class T_01 {public class Util {public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void print(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();}}?public static void main(String[] args) {int n=1001;int[] arr=new int[n];for (int i = 0; i < arr.length-1; i++) {arr[i]=i+1;}// ? ? ? 最后一個是隨機數arr[arr.length-1]=new Random().nextInt(n-1)+1;?// ? ? ? 最后一個數的隨機下標int index=new Random().nextInt(n);Util.swap(arr, index, arr.length-1);Util.print(arr);int x1=0;// ? ? ? 進行位運算for (int i = 1; i <= n-1; i++) {x1=(x1^i);}for (int i = 0; i < n; i++) {x1= (x1^arr[i]);}System.out.println(x1);}}
-
swap
方法:此方法的作用是交換數組arr
中索引為i
和j
的兩個元素。它借助一個臨時變量temp
來保存其中一個元素的值,進而實現交換操作。 -
print
方法:該方法用于打印數組arr
中的所有元素,元素之間以空格分隔,打印完所有元素后會換行。
-
arr[arr.length - 1] = new Random().nextInt(n - 1) + 1;
:把數組的最后一個元素設置為從 1 到n - 1
之間的隨機整數。
位運算原理
異或運算(^
)具有以下特性:
-
任何數與 0 異或結果為其本身,即
a ^ 0 = a
。 -
任何數與自身異或結果為 0,即
a ^ a = 0
。 -
異或運算滿足交換律和結合律,即
a ^ b ^ c = a ^ c ^ b
。
以n=11
為例(重復數為2):
【1,2,3,4,5,6,7,2,9,10,8】
?x1=0;for (int i = 1; i <= n-1; i++) {x1=(x1^i);}
x1=0^1^2^3^4^5^6^7^8^9^10
;
?for (int i = 0; i < n; i++) {x1= (x1^arr[i]);}
i=0;
x1=0^1^2^3^4^5^6^7^8^9^10^0
;
x1=1^2^3^4^5^6^7^8^9^10
;
i=1;
x1=1^2^3^4^5^6^7^8^9^10^1
;
x1=2^3^4^5^6^7^8^9^10
;
i=2;
x1=2^3^4^5^6^7^8^9^10^2
;
x1=3^4^5^6^7^8^9^10
;
……
i=10
x1=2^8^8
;
x1=2;
若不受題目限制:不用輔助儲存空間
int[] con=new int[n];for (int i = 0; i < n; i++) {con[arr[i]]++;}for (int i = 0; i < n; i++) {if(con[i]==2){System.out.println(i);break;}}