540. 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

Rust Solution

struct Solution;

impl Solution {
    fn single_non_duplicate(nums: Vec<i32>) -> i32 {
        let n = nums.len();
        let mut l = 0;
        let mut r = n - 1;
        while l < r {
            let mut m = l + (r - l) / 2;
            if m % 2 == 1 {
                m -= 1;
            }
            if nums[m + 1] == nums[m] {
                l = m + 2;
            } else {
                r = m;
            }
        }
        nums[l]
    }
}

#[test]
fn test() {
    let nums = vec![1, 1, 2, 3, 3, 4, 4, 8, 8];
    let res = 2;
    assert_eq!(Solution::single_non_duplicate(nums), res);
    let nums = vec![3, 3, 7, 7, 10, 11, 11];
    let res = 10;
    assert_eq!(Solution::single_non_duplicate(nums), res);
}

Having problems with this solution? Click here to submit an issue on github.