暴力办法 时间复杂度O(n^2)
int singleNumber(int* nums, int numsSize) {
for(int i = 0;i<numsSize;i++){
for(int j = i+1;j<numsSize;j++){
if(nums[i] == nums[j]){
break;
}
if(j == numsSize)
return nums[i];
}
}
return 0;
}
方法2 时间复杂度O(n),空间复杂度O(1)
利用异或操作。异或的性质1:交换律a ^ b = b ^ a,性质2:0 ^ a = a。于是利用交换律可以将数组假想成相同元素全部相邻,于是将所有元素依次做异或操作,相同元素异或为0,最终剩下的元素就为Single Number。
int singleNumber(int* nums, int numsSize) {
int x = 0;
for (size_t i = 0; i < numsSize; ++i)
x ^= nums[i];
return x;
}