Skip to main content

只出现一次的元素

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

解题思路

由于除了一个元素只出现一次,其他元素均出现两次,我们可以使用位运算异或运算来解决这个问题。异或运算具有以下性质:

任何数与 0 进行异或运算的结果都是它本身:axor0=aa xor 0 = a

任何数与自身进行异或运算的结果是 00axora=0a xor a = 0

异或运算满足交换律和结合律:axorbxorc=(axorb)xorc=axor(bxorc)a xor b xor c = (a xor b) xor c = a xor (b xor c)

注意:异或位运算是针对二进制数的。十进制数进行异或运算先转换为二进制数。

根据这些性质,我们可以通过对整个数组进行异或运算,最终得到的结果就是只出现一次的元素。

代码实现(C 语言)

int singleNumber(int* nums, int numsSize) {
int result = 0;
for (int i = 0; i < numsSize; i++) {
result ^= nums[i];
}
return result;
}