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