在arr中,只有一种数出现了K次,其他数都出现了M次
找出那个出现了K次的数
func onlyKTimes(arr []int,K, M int) int {
mp := map[int]int{}
for value, i := 1, 0; i < 32; i++ {
mp[value] = i
value <<= 1
}
t := [32]int{}
// t[0] 0位置的1出现了几个
// t[i] i位置的1出现了几个
for _, num := range arr {
for num != 0 {
rightOne := num & (-num)
t[mp[rightOne]]++
num ^= rightOne
}
}
ans := 0
for i := 0; i < 32; i++ {
if t[i] % M == 0 {
continue
}
if t[i] % M == K {
ans |= 1 << i
}else {
return -1
}
}
if ans == 0 {
count := 0
for _, num := range arr {
if num == 0 {
count++
}
}
if count != K {
return -1
}
}
return ans
}