剑指 Offer 56 - II. 数组中数字出现的次数 II
与LeetCode 137相同,有一组数不合群,其他都出现3次,就他只出现1次。
//按位取 异或,时间nlogC 空间O1;通用版本 logC = 32
func singleNumber(nums []int) int {
number, res := 0, 0
for i := 0; i < 64; i++ {
number = 0
for _, k := range nums {
number += (k >> i) & 1 //通过右移i位的方式,计算每一位1的个数
}
res |= (number) % 3 << i //最终将抵消后剩余的1放到对应的位数上
}
return res
}
//数字电路,时间On,空间O1
func singleNumber(nums []int) int {
a, b := 0, 0
for _, num := range nums {
b = (b ^ num) &^ a
a = (a ^ num) &^ b
}
return b
}