一个数组中除了一个数字只出现一次外,其余数字均出现偶数次,要求只扫描数组一次,找出这个只出现一次的数字。
注意,只扫描一次,因此不能用排序。使用异或位运算符。
1、两个相同的数字进行异或操作的结果为0
2、任何数字与0进行异或操作的结果都为这个数字本身
int getSingleDog(int* a, int n)
{
int result = 0;
for (int i = 0; i < n; i++)
{
result ^= a[i];
}
return result;
}
异或中的经典结论:
a^b^b = b^a^b = b^b^a = a
使用这个结论可以不使用临时变量交换两个变量的值
a = a^b
b = a^b
a = a^b