137. 只出现一次的数字 II

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:
输入:nums = [2,2,6,2]
输出:6

  1. //按位取 异或,时间nlogC 空间O1;通用版本 logC = 32
  2. func singleNumber(nums []int) int {
  3. number, res := 0, 0
  4. for i := 0; i < 64; i++ {
  5. number = 0
  6. for _, k := range nums {
  7. number += (k >> i) & 1 //通过右移i位的方式,计算每一位1的个数
  8. }
  9. res |= (number) % 3 << i //最终将抵消后剩余的1放到对应的位数上
  10. }
  11. return res
  12. }
//数字电路,时间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
}