我正在使用Go实现如下所述的算法:
有一个数组,一个数字只出现一次,其他所有数字都出现3次,找到这个数字只出现一次
我的代码如下:
import (
"testing"
)
func findBySum(arr []int) int {
result := 0
sum := [32]int{}
for i := 0; i < 32; i++ {
for _, v := range arr {
sum[i] += (v >> uint(i)) & 0x1
}
sum[i] %= 3
sum[i] <<= uint(i)
result |= sum[i]
}
return result
}
func TestThree(t *testing.T) {
// except one nubmer,all other number appear three times
a1 := []int{11, 222, 444, 444, 222, 11, 11, 17, -123, 222, -123, 444, -123} // unqiue number is 17
a2 := []int{11, 222, 444, 444, 222, 11, 11, -17, -123, 222, -123, 444, -123} // unque number is -17
t.Log(findBySum(a1))
t.Log(findBySum(a2))
}
但是,我发现我的PC上的运行结果是错误的,而在https://play.golang.org/p/hEseLZVL617中运行的相同代码是正确的,我不知道为什么。
结果在我的电脑上:
结果https://play.golang.org/p/hEseLZVL617:
如我们所见,当唯一编号为正时,两个结果都是正确的,但是当唯一编号为负时,我的PC中的结果是错误的,而在线结果是正确的。
我认为这与我的代码中的位操作有关,但我找不到根本原因。
我使用了 IDEA 2019.1.1 和下面列出的 Golang 版本:
我不知道为什么相同的代码可以在网上正常工作,而不能在我的本地电脑上工作,谁能帮我分析一下?提前致谢!
喵喵时光机
相关分类