题目
思路
这个题看着简单,其实不简单,昨晚写这个题的时候,是不是第一影响是有序序列去重,但是这个题跟那个题完全不同,我也想到了那个双指针写法,想着不用排序能不能搞出来这个题,还是很难弄的。
你想一下,如果先排序,在用双指针来做这个题,是不是代价太大了,一般而言,这种题的要求就是只要遍历一遍,就要找出那个数.我是看了别人的做法,才写出的,自己想不到!!!
*下面来说这个题解:
采用异或的办法来解决这个问题的,异或是(相同为0,相异为1)则有: a^a = 0;(相同为0),a^0 = a;(任何数与0异或是任何数!)有了这个东西,则上面的问题可以解决了,你想一下,要找“SingleDog”,是不是只有一个数单一出现的,其它的数都是成对出现的,那么通过异或操作相同的为0,不相同的只剩下那儿“a SingleDog”,下面进行代码实现!!!
代码实现
int FindSingleDog(int arr[], int sz)
{
int SingleDog = 0;
for (int i = 0; i < sz; i++)
{
SingleDog ^= arr[i];
}
return SingleDog;
}
int main()
{
int arr[] = { 1,2,3,4,5,1,2,3,4 };
int sz = sizeof(arr) / sizeof(int);
int SingleDog = FindSingleDog(arr, sz);
printf("SingleDog = %d", SingleDog);
return 0;
}
希望看这个博客都不是a single dog 吧!!!(小编是!)
完结!!!