Single Element in a Sorted Array

Problem

Given a sorted array consisting of only integers where every element appears twice except for one element which appears 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 Solution: O(lg n) time

public class Solution {
    public int singleNonDuplicate(int[] nums) {
        int start = 0, end = nums.length - 1;
        while (start < end) {
            int mid = (start + end) / 2;
            if (mid % 2 == 1) mid--;
            if (nums[mid] != nums[mid + 1]) end = mid;
            else start = mid + 2;
        }
        return nums[start]; //return nums[end] is fine too 
    }
}

Analysis

We solve this problem by thinking about its indices
The nums is given by only one element appearing once and all other appearing twice
Therefore, the length must be odd
Then we apply Binary Search and get pair of nums from the middle
The index of first number should be even and index of the second should be odd
Hence we decrement mid-- if its odd
Then if nums[mid] != nums[mid + 1], we know that single element appears before in this range
Hence, we move the end to mid
Otherwise, we move to the right by setting start = mid + 2
At the end, we return nums[start]

results matching ""

    No results matching ""