给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

1
int singleNumber(int[] nums)

计算机科学中,异或满足四大定律

1
2
3
4
1.恒定律:A ^ 0 = A
2.归零率:A ^ A = 0
3.交换律:A ^ B = B ^ A
4.结合律:(A ^ B) ^ C = A ^ (B ^ C)

假如给定的数组是 [1, 3, 1, 3, 2, 4, 4]。根据异或的定律,对数组从头到尾进行异或可以等价成分组之后的异或,这里可以理解成 [1, 1, 2, 3, 3, 4, 4]。相同的数都会变为 0 ,最后剩下的那个数也就和 0 进行异或等到自己本身。

1
2
3
4
5
6
7
int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}