1234567891011121314151617181920212223242526 |
- func singleNonDuplicate(nums []int) int {
- n := len(nums)
- if n == 0 {
- return 0
- }
- beg, end := 0, n-1
- for beg < end { // Binary search
- mid := beg + (end-beg)/2
- if nums[mid] == nums[mid+1] {
- if (mid-beg)&1 == 1 {
- end = mid - 1
- } else {
- beg = mid + 2
- }
- } else {
- if mid == 0 || nums[mid-1] != nums[mid] {
- return nums[mid]
- } else if (end-mid)&1 == 1 {
- beg = mid + 1
- } else {
- end = mid - 2
- }
- }
- }
- return nums[beg]
- }
|