如何找数组中唯一重复的数?
题目:
方法一:不使用辅助空间的方法
思路:
1、异或:同0异1
2、一组数连续异或,相当于消除重复的数。
所以可以把1到1000这1000个数异或以后,和数组中的1001个元素异或,这样结果就是重复的元素。
例:
数组为:{1,2,3,4,4,5,6} 一共7个数记异或结果为x1
数组 {1,2,3,4,5,6}异或结果为x2,
x1异或x2就是重复的数4
下面展示 代码
。
import java.util.Random;
public class findnumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
int N=11;
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(9)+1;//生成重复的那个随机数
int index=new Random().nextInt(10);//生成随机下标
int a=0;
a=arr[index];
arr[index]=arr[arr.length-1];
arr[arr.length-1]=a;//交换生成的随机数到随机下标的位置
for(int i=0;i<N;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
int x1=0;
for(int i=1;i<N;i++)
{
x1^=i;
}//x1为1异或到10的值
for(int i=0;i<N;i++)
{
x1^=arr[i];
}
System.out.print(x1);
}
}
结果为
方法二:若可以使用辅助空间的
创建新数组arr2[],用arr2[]的下标来统计该数的个数,个数为2的数即为要找的重复的数
代码片段如下:
int[] arr2=new int [N];
for(int i=0;i<N;i++)
{
arr2[arr[i]]++;
}
for(int i=0;i<N;i++)
{
if(arr2[i]==2){
System.out.print(i);
}
}
总代码结果:
上面为方法一
下面为方法二