由于以前刚写了461号题目,这个题目与那个很类似,
461号题目用异或来算两个不同的部分,
那这个题目须要排除同样的部分,并找到不同的部分。
那么能够再利用一下异或的特性:
一、相同为0,因此,a ^ a = 0。
二、不一样为0,因此,0 ^ b = b。
因此,假设数组里面的数分别就是 a,a,b,
---> a ^ a ^ b = b,那么b就是要找的那个不同的数字。
(异或的最终结果与异或的顺序无关,即 a ^ b ^ c = a ^ c ^ b = b ^ c ^ a )。
附上代码:数组
int singleNumber(int* nums, int numsSize){ int i = 1; for (; i<numsSize; i++) { nums[0] ^= nums[i]; } return nums[0]; }
注:这里没有定义一个新变量,而使用nums[0]做为返回值,是为了节省一点执行用时(少了一次计算),少消耗点内存。
若是哪里能够再节省执行用时的,还请赐教!谢谢!code