540.single-element-in-a-sorted-array.go 465 B

1234567891011121314151617181920212223242526
  1. func singleNonDuplicate(nums []int) int {
  2. n := len(nums)
  3. if n == 0 {
  4. return 0
  5. }
  6. beg, end := 0, n-1
  7. for beg < end { // Binary search
  8. mid := beg + (end-beg)/2
  9. if nums[mid] == nums[mid+1] {
  10. if (mid-beg)&1 == 1 {
  11. end = mid - 1
  12. } else {
  13. beg = mid + 2
  14. }
  15. } else {
  16. if mid == 0 || nums[mid-1] != nums[mid] {
  17. return nums[mid]
  18. } else if (end-mid)&1 == 1 {
  19. beg = mid + 1
  20. } else {
  21. end = mid - 2
  22. }
  23. }
  24. }
  25. return nums[beg]
  26. }