137. 只出现一次的数字 II
给你一个整数数组 nums
,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,6,2]
输出:6
//按位取 异或,时间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
}