只出现一次的元素
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
解题思路
由于除了一个元素只出现一次,其他元素均出现两次,我们可以使用位运算异或运算来解决这个问题。异或运算具有以下性质:
任何数与 0 进行异或运算的结果都是它本身:
任何数与自身进行异或运算的结果是 :
异或运算满足交换律和结合律:
注意:异或位运算是针对二进制数的。十进制数进行异或运算先转换为二进制数。
根据这些性质,我们可以通过对整个数组进行异或运算,最终得到的结果就是只出现一次的元素。
代码实现(C 语言)
int singleNumber(int* nums, int numsSize) {
int result = 0;
for (int i = 0; i < numsSize; i++) {
result ^= nums[i];
}
return result;
}