description:
Given a non-empty array of integers, every element appears three times except for one,
which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity.
Could you implement it without using extra memory?
Example 1:
Input: [2,2,3,2]
Output: 3
Example 2:
Input: [0,1,0,1,0,1,99]
Output: 99
code:
func singleNumber(nums []int) int {
//3 == bit(11), counter: 00 => 01 => 10 => 11 => 00...
//bit number == 2
x1, x2, mask := 0, 0, 0
for _, v := range nums {
x2 ^= x1 & v
x1 ^= v
mask = ^(x2 & x1)
x1 &= mask
x2 &= mask
}//for _, v := range nums
//1 == bit(01), so finally count to 1, x1
return x1
}//func singleNumber(nums []int) int
result:
personal opinion:
thanks for the authors of
https://blog.csdn.net/wlwh90/article/details/89712795
and
https://leetcode.com/problems/single-number-ii/discuss/43295/Detailed-explanation-and-generalization-of-the-bitwise-operation-method-for-single-numbers