首先我们要了解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);
}
}
巧妙的运用异或运算符 ,可以大大地提升程序运行的效率