位运算 求数组中的重复数

找出数组中重复的那个数

首先,需要创建一个数组
int n=1001; int[] a=new int[n]; for(int i=0;i<a.length-1;i++) { a[i]=i+1; }
然后需要对这个数组中最后一个数插入随机数,并且还需要求得一个随即下标,让这个随机数随即插入数组中的一个随机位置;以求得一个数字的重复
a[a.length-1]=new Random().nextInt(n)+1;//求随机数放在数组最后 int index=new Random().nextInt(n);//求随机下标插入随机数 int b=a[a.length-1];//对随即下标数值进行互换 a[a.length-1]=a[index]; a[index]=b;
**接下来简单说明一下代码原理,首先要了解异或的定义,不同是为1,相同为零,如上面的代码,我们取1000以内的数,并在其中任意取得随机数,其中除一对随机数外其他均为单,
随意我们可以再次增加一份同等数量1000以内的数,让两组数进行异或,那么原来为单个的数就变为了双,重复的数变成了三个,那么进行异或,两个相同的数异或为零,零与任何数进行异或都为另一个数,那个重复的数有三个进行异或后还是重复的数,这样即可求得那个重复的数,代码如下
**int x=0; for(int i=1;i<=n-1;i++) { x=x^i; } for(int i=0;i<=a.length-1;i++) { //进行异或运算 x=x^a[i]; } System.out.println(x);
最后输出即可得到重复的值

还有一种方法是辅助空间

创建一个新的数组,以上面数组的值为新数组的下标,然后for循环,经i选哪个happ[a[i]]++的操作,这样再用if判断哪个值为2,break跳出输出即可。

猜你喜欢

转载自blog.csdn.net/weixin_45956604/article/details/105159906
今日推荐