Single Element in a Sorted Array

You are given a sorted array consisting of only integers where every element appears exactly twice, except for one element which appears exactly once. Find this single element that appears only once.

Follow up: Your solution should run in O(log n) time and O(1) space.

Example 1:

Input: nums = [1,1,2,3,3,4,4,8,8]
Output: 2

Example 2:

Input: nums = [3,3,7,7,10,11,11]
Output: 10

Constraints:

  • 1 <= nums.length <= 10^5

  • 0 <= nums[i] <= 10^5

class Solution {
    public int singleNonDuplicate(int[] nums) {
        if (nums.length == 1)
            return nums[0];
        int high = nums.length - 1, low = 0;
        int ans = 0;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            if (mid % 2 == 0) {
                if (nums[mid] != (mid - 1 >= low ? nums[mid - 1] : -1)
                        && nums[mid] != (mid + 1 <= high ? nums[mid + 1] : -1)) {
                    ans = nums[mid];
                    break;
                }
                if (mid + 1 <= high && nums[mid] == nums[mid + 1])
                    low = mid + 1;
                else
                    high = mid - 1;
            } else {
                if (mid + 1 <= high && nums[mid] == nums[mid + 1])
                    high = mid - 1;
                else
                    low = mid + 1;
            }
        }
        return ans;
    }
}

Last updated