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.
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
思路:分奇数偶数讨论,binary search;偶数判断 A[i] == A[i+1], 奇数判断A[i] == A[i-1]
class Solution {
public int singleNonDuplicate(int[] nums) {
int start = 0; int end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
// 注意,这里是index,奇数实际上是0,1,2,3,是偶数个;
// 偶数实际上是0,1,2 是奇数个;
if(mid % 2 == 0) {
if(nums[mid] == nums[mid + 1]) {
start = mid;
} else {
end = mid;
}
} else {
// nums[mid] % 2 != 0;
if(nums[mid] == nums[mid - 1]) {
start = mid;
} else {
end = mid;
}
}
}
if(start >= 1 && nums[start] == nums[start - 1]) {
return nums[end];
}
return nums[start];
}
}