Single Element in a Sorted Array

medium array binary search

Problem

A sorted array contains pairs of equal elements except for one single element that appears once. Find the single element in O(log n) time.

Inputnums = [1, 1, 2, 3, 3, 4, 4, 8, 8]
Output2
All other values appear twice; only 2 is alone.

def single_non_duplicate(nums):
    lo, hi = 0, len(nums) - 1
    while lo < hi:
        mid = (lo + hi) // 2
        if nums[mid] == nums[mid ^ 1]:
            lo = mid + 1
        else:
            hi = mid
    return nums[lo]
function singleNonDuplicate(nums) {
  let lo = 0, hi = nums.length - 1;
  while (lo < hi) {
    const mid = (lo + hi) >> 1;
    if (nums[mid] === nums[mid ^ 1]) lo = mid + 1;
    else hi = mid;
  }
  return nums[lo];
}
class Solution {
    public int singleNonDuplicate(int[] nums) {
        int lo = 0, hi = nums.length - 1;
        while (lo < hi) {
            int mid = (lo + hi) >>> 1;
            if (nums[mid] == nums[mid ^ 1]) lo = mid + 1;
            else hi = mid;
        }
        return nums[lo];
    }
}
int singleNonDuplicate(vector<int>& nums) {
    int lo = 0, hi = nums.size() - 1;
    while (lo < hi) {
        int mid = (lo + hi) / 2;
        if (nums[mid] == nums[mid ^ 1]) lo = mid + 1;
        else hi = mid;
    }
    return nums[lo];
}
Time: O(log n) Space: O(1)