33 lines
410 B
Go
33 lines
410 B
Go
package main
|
|
|
|
func singleNumber(nums []int) []int {
|
|
reduce := func() int {
|
|
xor := 0
|
|
for _, x := range nums {
|
|
xor ^= x
|
|
}
|
|
return xor
|
|
}
|
|
xor := reduce()
|
|
|
|
findMask := func() int {
|
|
mask := 1
|
|
for (xor & mask) == 0 {
|
|
mask <<= 1
|
|
}
|
|
return mask
|
|
}
|
|
mask := findMask()
|
|
|
|
a := 0
|
|
b := 0
|
|
for _, x := range nums {
|
|
if (x & mask) != 0 {
|
|
a ^= x
|
|
} else {
|
|
b ^= x
|
|
}
|
|
}
|
|
|
|
return []int{a, b}
|
|
}
|