java中异或运算符(^)求一组数中重复的数

首先我们要了解java中一个运算符——异或(^)

异或运算符是把两个数转换成为二进制,然后进行每一位进行异或操作,相同为0,不同为1,下面举一个例子

例如:十进制:15  转成二进制为:11111111

          十进制:2   转成二进制为:00000010

         按位进行异或操作的结果为:11111101  ——>13

如果我们将这个结果继续与其中的一个数进行异或运算,就可以得出另外一个数!

2^15^15 = 2    or     2^15^2 = 15

所以我们利用这一关系可以轻松的求出给定的数组中,出现重复的那一个数

例如:一个长度为11的数组中,里面依次存放着0~9个数,第11位是一个0~9任意一个数,然后进行随机打乱,找出那个重复的数。

实现这道题目的方法有很多,但是选择异或这种方式效率更高

package demo16;
public class ListTest2 {
	public static void main(String[] args)
	{

	int[] array = {1,2,3,4,5,6,7,8,9,3};

	int index1 = (int)(Math.random()*11);  
	int index2 = (int)(Math.random()*11);  
	int temp = array[index1];  
	array[index1] = array[index2];  
	array[index2] = temp;  
	int v = 0;
	for (int i = 0;i < array.length;i++) {
	v ^= array[i];
	}
	System.out.println("重复的数是:" + v);
	}
}

巧妙的运用异或运算符 ,可以大大地提升程序运行的效率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值