问题描述:
代码如下(两种方法实现,一为异或法,效率高;二为计数排序的思想,需要额外的空间):
package leetcode;
import java.util.Arrays;
import java.util.Random;
public class first {
//唯一成对的数字 1-1000中寻找两个相同的数字
public static void main(String[] args) {
int number=1001;//数字
int[] arr=new int[number];
for (int i = 0; i <number ; i++) {//对数组赋值
arr[i]=i+1;
}
int temp=new Random().nextInt(number+1);//生成随机的数字
arr[number-1]=temp;
System.out.println(temp);
System.out.println(Arrays.toString(arr));
//方法一 采用异或的方法去重(效率高)
int res=0;
for (int i = 1; i <number ; i++) {
res=i^res;
}
for (int i = 0; i <number ; i++) {
res=res^arr[i];
}
System.out.println(res);
//方法二:采用计数排序思想
int[] arr1=new int[number];
int res1=0;
for (int i = 0; i <number ; i++) {
arr1[arr[i]]+=1;
}
for (int i = 0; i <arr1.length ; i++) {
if (arr1[i]==2)
res1=i;
}
System.out.println(res1);
}
}
运行结果如下: