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] }