May Leetcode Challenge - Day 12

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.

Example 1:

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

Example 2:

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

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

Solution

Binary search, take mid of array
Mid not equal left or right, return it
Check elements count of left and right
With odd case, we can move to left if first left element equal to mid
With even case, we can move to right if first right element equal to mid

class Solution {
    func singleNonDuplicate(_ nums: [Int]) -> Int {
        var low = 0, high = nums.count - 1
        
        while low < high {
            var mid = (high + low) / 2
            if mid % 2 == 1 { mid -= 1 }
            
            if nums[mid] != nums[mid + 1] { 
                high = mid 
            } else{
                low = mid + 2
            }
        }
    
        return nums[low]
    }
}