一、认识异或
异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
通过上面的介绍异或无外乎就是:两元素相同为零,相异为1。
即 0 ^ 1 = 1,0 ^ 0 =0,1 ^ 1 = 0;
延伸至变量 :a ^ a = 0; a ^ 0 = a;
利用异或的性质我们来解决这个问题
二、分析问题
一个数组中只有一个元素单独出现其余元素均成对出现请找出这个元素
假定测试数组为(题目没有说数组元素是有序的,为了观感和易于理解假定成有序)
[ 2 ,2, 3, 4, 4,6,6]
用异或符把数组中的所有元素连接起来就得到
2 ^ 2 ^ 3 ^ 4 ^ 4 ^ 6 ^ 6
由于异或的性质:a ^ a = 0; a ^ 0 = a;
所以最终的结果就是单一的元素 3
三、代码实现
package leetcode_test;
public class find {
public static void main(String[] args) {
int nums[] = new int []{2,2,3,4,4,6,6};
int key = 0;
for(int x:nums) {
key = key^x;
}
System.out.println(key);
}
}