Friday, August 21, 2020

540. Single Element in a Sorted Array ----M

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

 A:

class Solution {
public:
    int singleNonDuplicate(vector<int>& nums) {
        int n = nums.size();
        int start = 0, end = n-1;
        while(start<end){
            int mid = start + (end-start)/2; // length is always odd number
            int cL = mid-start;
            if(nums[mid] == nums[mid+1] ){
                if(cL %2==0){
                    start = mid+2;
                }else{
                    end = mid-1;
                }
            }else{
                if(cL%2==0){
                    end = mid;
                }else{
                    start = mid+1;
                }
            }
        }
        return nums[start];
    }
};

需要考虑左右的奇偶特性


No comments:

Post a Comment