540. 有序数组中的单一元素
public int singleNonDuplicate(int[] nums) {// 单数的下标一定是偶数,比如11233中2的下标是2// 如果存在偶数i,那么在单数的左侧,nums[i]==num[i+1],在单数及其右侧,nums[i]!=num[i+1]int low = 0;int high = nums.length - 1;while (low < high) {int mid = low + (high - low) / 2;mid -= mid & 1; // 确保mid是偶数if (nums[mid] == nums[mid + 1]) { // 偶数位置的元素和相邻的下一个元素相等low = mid + 2; // 说明单数在nums[mid+1]的右边} else { // 不相等,则说明单数在nums[mid]的左边,或者单数就是nums[mid]high = mid;}}return nums[low];}
