| 12345678910111213141516171819202122232425262728293031323334353637383940 | package mainfunc singleNumberOld(nums []int) int {	set := make(map[int]bool, 0)	sumNums := 0	for _, v := range nums {		sumNums += v		if !set[v] {			set[v] = true		}	}	sumSet := 0	for k := range set {		sumSet += k	}	return (sumSet*3 - sumNums) / 2}// x2 x1   x2 x1   x2 x1   x2 x1   x2 x1//  0  0 -> 0  1 -> 1  0 -> 1  1 -> 0  0// So: x1 ^= i, x2 ^= (x1 & i), ... , xn ^= (x[n-1] & ... & x1 & i)// And we need a mask to set x1~xn to 0 when counter reaches k,// which means mask == 0 only when count == k. For example, when k is 3,// mask = 11, ie. mask = !(x2 & x1)func singleNumber(nums []int) int {	x2, x1, mask := 0, 0, 0	for _, i := range nums {		x2 ^= (x1 & i)		x1 ^= i		mask = ^(x2 & x1)		x2 &= mask		x1 &= mask	}	return x1}// func main() {// 	println(singleNumber(// 		[]int{0, 1, 0, 1, 99, 1, 0}))// }
 |