260.single-number-iii.go 338 B

12345678910111213141516171819
  1. func singleNumber(nums []int) []int {
  2. n, a, b := len(nums), 0, 0
  3. for i := 0; i < n; i++ {
  4. a ^= nums[i]
  5. }
  6. mask := 1
  7. for mask & a == 0 {
  8. mask <<= 1
  9. }
  10. a = 0
  11. for i := 0; i < n; i++ {
  12. if nums[i] & mask == 0 { // Use the mask to split all nums into 2 groups
  13. a ^= nums[i]
  14. } else {
  15. b ^= nums[i]
  16. }
  17. }
  18. return []int{a, b}
  19. }