一道简单题,大意是给你一个数组,除了一个数只出现一次,其他全部的数字都出现了两次。求那个数。
正常人的思路都是先sort一遍,再写个step为2的for循环找。这样做时间复杂度nlogn+n,空间复杂度1。
但是!!!下面这个做法用了相同的空间复杂度,时间复杂度仅为n。
巧妙利用了按位异或的性质:一样为0,不一样为1。最后异或之后只剩下不同的数啦!
粘了代码如下:
int singleNumber(int* nums, int numsSize) {
int x = 0;
int i = 0;
for (i = 0; i<numsSize;i++){
x=x^nums[i];
}
return x;
}