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);
	}
}

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

猜你喜欢

转载自blog.csdn.net/zgl1243094406/article/details/80159305