数组中的重复数_java实现

位运算_数组中的重复元素

问题:
一列数组中有一个元素重复出现了两次,且不知道他的位置,其他元素均只出现一次,设计算法,在每个数组元素只访问一次的情况下将它找出来
思路:
用异或进行比对x=x ^ i ^ a[i],i在循环中与数组的个数相同,但i和x均从0开始,也就是两组数的相互对应,而重复的元素出现了三次,最后的x值即为重复元素

public class 数组重复数 {
    public static void main(String[] args) {
        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(N-1)+1;//生成N以内的随机数
        int index=new Random().nextInt(N);//生成一个随机下标
        //将随机下标与随机数的位置进行调换
        int temp;
        temp=arr[index];
        arr[index]=arr[arr.length-1];
        arr[arr.length-1]=temp;

        for(int j:arr){
            System.out.print(j+" ");
        }
        System.out.println();

        int x1=0;
        for (int i = 0; i < N; i++) {
            x1=x1^i^arr[i];//主要在这一行,搞明白异或运算符很好理解的
        }
        System.out.println(x1);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值