Thursday, March 18, 2021

LeetCode [540] Single Element in a Sorted Array

 540. Single Element in a Sorted Array

Medium

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
    public int singleNonDuplicate(int[] nums) {
        int n = nums.length;
        int l = 0, r = n-1;
        while(l<=r){
            int m = (l+r)/2;
            if((m==l || nums[m-1]!=nums[m]) && (m==r || nums[m]!=nums[m+1])){
                return nums[m];
            }else{
                //the first element
                if(m==l || nums[m-1]!=nums[m]){
                    int leftLen = m+2;
                    if(leftLen%2==0) l = leftLen;
                    else r=m-1;
                }else{//the second element
                    int leftLen = m+1;
                    if(leftLen%2==0) l = leftLen;
                    else r=m-1;
                }
            }
        }
        return -1;
    }
}

No comments:

Post a Comment