详细步骤都在注释里
忽略类名…(手动狗头)
public class WeiYiChengDui {
public static void main(String[] args) {
//找到数组中重复的数字,不能利用额外存储空间
//定义一个长度为1001的数组,存放1-1000之中的数字,会有一个数字重复
int N=1001;
int arr[]=new int[N];
//放1000个数字
for (int i = 0; i < arr.length-1; i++) {
arr[i]=i+1;
}
//生成一个1-1000的随机数
int aver=new Random().nextInt(N-1)+1;
//暂时把这个数字先放到最后一个位置
arr[arr.length-1]=aver;
//生成一个随机位置,把这个数字放到随机位置上
int index=new Random().nextInt(N);//0-1000
int temp=arr[index];
arr[index]=aver;
arr[arr.length-1]=temp;
System.out.println(Arrays.toString(arr));
//到此,数组生成完毕
//利用异或运算符的去重功能来完成余下任务
int x=0;
for(int i=0;i<N;i++)
{
x=x^i;
}
for (int i = 0; i < arr.length; i++) {
x=(arr[i]^x);
}
//留下来的就是重复的那个
System.out.println(x);
//利用辅助空间的暴力版本
//思路:遍历arr,在辅助空间的相应位置+1
int help[]=new int[N];
for (int i = 0; i < arr.length; i++) {
help[arr[i]]++;
}
System.out.println(Arrays.toString(help));
for (int i = 0; i < help.length; i++) {
if(help[i]==2)
{
System.out.println(i);
break;
}
}
}
}
位运算真的太6了