#!/usr/bin/env python from typing import List class Solution: def singleNonDuplicate(self, nums: List[int]) -> int: start = 0 end = len(nums) - 1 mid = 0 if len(nums) == 1: return nums[0] while start < end: mid = (start + end) // 2 if nums[mid] == nums[mid + 1]: if (end - mid + 1) % 2 == 0: end = mid - 1 else: start = mid elif nums[mid] == nums[mid - 1]: if (mid - start + 1) % 2 == 0: start = mid + 1 else: end = mid else: return nums[mid] return nums[end] if __name__ == "__main__": solution = Solution() assert solution.singleNonDuplicate([1, 1, 2, 3, 3, 4, 4, 8, 8]) == 2 assert solution.singleNonDuplicate([3, 3, 7, 7, 10, 11, 11]) == 10 assert solution.singleNonDuplicate([1, 2, 2, 3, 3, 4, 4, 8, 8]) == 1 assert solution.singleNonDuplicate([1, 1, 2, 2, 3, 3, 4, 4, 8]) == 8 assert solution.singleNonDuplicate([1, 1, 2]) == 2 assert solution.singleNonDuplicate([0, 1, 1, 2, 2, 5, 5]) == 0