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