求1-1000的整数中重复的那个数,有1001个数,只有唯一一个数重复
算法一
利用按位异或,因为11=0,10=1,0^0=0,当一组数中当一个出现奇数次的数就会为被筛选出来,出现偶数次就会舍去。时间复杂度O(n),空间复杂度O(1)
算法二
使用一个数组统计每个数的个数。时间复杂度O(n),空间复杂度O(n);
import java.util.Random;
public class Main {
public static void main(String[] args) {
int N = 1000;
int[] nums=new int[N+1];
for(int i=0;i<nums.length-1;++i){
nums[i]=i+1;
}
nums[nums.length-1]= new Random().nextInt(N);
int index = new Random().nextInt(N);
swap(nums,nums.length-1,index);
for(int i=0;i<nums.length;++i){
System.out.print(nums[i]+" ");
}
System.out.println();
System.out.println("=====================================");//方法一
int result = 0;
for(int i=1;i<=N;++i){
result ^=i;
}
for(int i=0;i<nums.length;++i){
result^=nums[i];
}
System.out.println(result);
System.out.println("====================================");//方法二
int[] tmp=new int[N];
for(int i=0;i<nums.length;++i){
tmp[nums[i]]++;
if(tmp[nums[i]]==2){
System.out.println(nums[i]);
break;
}
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}