已知数组中有两种数,一种为奇数次有一个,其余为偶数次,求奇数次的数
func printoddtimesnum1(arr []int) {
eor := 0
for i := 0; i < len(arr); i++ {
eor ^= arr[i]
}
fmt.Println(eor)
}
已知数组中有两种数,一种为奇数次有两个,其余为偶数次,求奇数次的数
func printoddtimesnum2(arr []int) {
eor := 0
temp := len(arr)
for i := 0; i < temp; i++ {
eor ^= arr[i]
}
// 拿出eor最右侧的1
rightone := eor & (-eor)
onlyone := 0
for i := 0; i < temp; i++ {
if (arr[i] & rightone) != 0 {
onlyone ^= arr[i]
}
}
fmt.Println(onlyone, (eor ^ onlyone))
}
这篇博客介绍了两种方法来找出数组中出现奇数次的数。第一种方法简单地使用异或操作符找到数组中唯一出现一次的数。第二种方法在数组中有两个数出现奇数次的情况下,通过异或操作和位运算找出这两个数。这两种方法都利用了异或操作的性质,即相同数值异或结果为0,不同数值异或结果为这两个数值本身。
1156

被折叠的 条评论
为什么被折叠?



