查找数组单身狗的问题
问题如下:
- 已知一个数组中有多个元素,其中只有一个是单独的,其他都是成对的
- 比如:{1,4,6,7,8,9,8,7,4,6,1} ===> 9
- 使用算法找出单独的那个数
解决:
最简单的方法是使用异或运算符(^)
a^b =把a和b进行二进制运算 规则为相同为0 不同为1,在转换成十进制;
例如
System.out.println(1 ^ 1);//0000 0001 ^
0000 0001 = 0
输出结果为0
System.out.println(1 ^ 2);//0000 0001 ^
0000 0010 == 0000 0011 =3
输出结果为3
System.out.println(1 ^ 3);//0000 0001
^0000 0011 ==0000 0010 =2
输出结果为2
System.out.println((1^ 2^ 3^ 3^ 2^1));
则输出结果0
知道异或的运算规则之后,那么
public class Demo {
public static void main(String[] args) {
int[] ints = {1, 4, 6, 7, 8, 9, 8, 7, 4, 6, 1};
int dog=0;
for (int i = 0; i <ints.length ; i++) {
dog=dog^ints[i];
}
System.out.println(dog);
}
}
结果为:9