题目来源:蓝桥云课

不用辅助储存空间
java
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;
若不受题目限制:不用辅助储存空间
java
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;
}
}