# 找到出现次数奇数次的数
# 题目
在一个数组中,只有一个数出现了奇数次,其余数都出现过偶数次,要求找到出现奇数次的数,如以下数组:

其中,只有6出现了一次,其余数出现了两次,根据题目出现奇数次的数为6
# 异或
异或的一些性质:
a ^ a = 0a ^ (b ^c) = (a ^ b) ^ c异或满足结合律a ^ 0 = a异或其实可以理解为异或数在二进制上的无进位相加
# 题解
从上面的性质2,可以知道我们的数组整体的异或如:

是可以调整位置的如:

在根据性质1,我们可以知道,数组整体异或完后即可得到只出现奇数次的数,因为出现偶数次的数异或后都变为了0
# 代码
func FindOddTimesNum(arr []int) int {
if arr == nil || len(arr) == 0 {
return -1
}
ans := 0
for _, v := range arr {
ans ^= v
}
return ans
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10