# 找到出现次数奇数次的数

# 题目

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

其中,只有6出现了一次,其余数出现了两次,根据题目出现奇数次的数为6

# 异或

异或的一些性质:

  1. a ^ a = 0
  2. a ^ (b ^c) = (a ^ b) ^ c 异或满足结合律
  3. 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
上次更新: 3/5/2024,