二、思路:
根据题目要求,使用的算法只使用常量额外的空间,即空间复杂度为O(1),算法中我们不能使用额外的数据结构,只能使用一些额外的变量。
由此我们要想到位运算,首先要学会几个位运算法则:
1.x异或0=x
2.x异或x=0
3.x异或y异或=z异或x异或z(交换律)
所以我们只要将给出的数组中所有元素都异或起来,那么出现两次的数字异或结果为0,只剩下0和出现一次的数字异或,由运算法则1得最终结果就是出现一次的数字。
三、代码:
int singleNumber(int* nums, int numsSize){
int result=0;
for(int i=0;i<numsSize;i++)
{
result^=nums[i];
}
return result;
}