剑指 Offer 56 - II. 数组中数字出现的次数 II
与LeetCode 137相同,有一组数不合群,其他都出现3次,就他只出现1次。
//按位取 异或,时间nlogC 空间O1;通用版本 logC = 32func singleNumber(nums []int) int {number, res := 0, 0for i := 0; i < 64; i++ {number = 0for _, 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
}
