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.
1 public class Solution { 2 public int singleNonDuplicate(int[] nums) { 3 int left = 0, right = nums.length - 1; 4 5 while (left <= right) { 6 if (left == right) return nums[left]; 7 8 int mid = left + (right - left) / 2; 9 if (mid > 0 && mid < right && nums[mid] != nums[mid - 1] && nums[mid] != nums[mid + 1]) 10 return nums[mid]; 11 12 if (mid > 0 & nums[mid - 1] == nums[mid]) { 13 if ((mid - left) % 2 == 1) left = mid + 1; 14 else right = mid - 2; 15 } else if (mid <= right && nums[mid] == nums[mid + 1]) { 16 if ((mid - left) % 2 == 1) right = mid - 1; 17 else left = mid + 2; 18 } 19 } 20 return -1; 21 } 22 }
时间: 2024-10-07 15:28:00