class Solution {
public int singleNonDuplicate(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
int n = nums.length;
if (nums[0] != nums[1]) {
return nums[0];
}
if (nums[n - 1] != nums[n - 2]) {
return nums[n - 1];
}
int left = 1;
int right = n - 2;
while (left + 1 < right) {
int mid = left + (right - left) / 2;
if (nums[mid] != nums[mid + 1] && nums[mid] != nums[mid - 1]) {
return nums[mid];
}
else if (nums[mid] == nums[mid + 1]) {
if (mid % 2 == 0) {
left = mid;
} else {
right = mid;
}
} else {
if (mid % 2 == 0) {
right = mid;
} else {
left = mid;
}
}
}
if (nums[left] != nums[left + 1] && nums[left] != nums[left - 1]) {
return nums[left];
}
return nums[right];
}
}
้พ็นไธป่ฆๅจไบ็ๅบๆฅ่ฟๆฏไธ้binary search๏ผๆ็คบ็นๅบ่ฏฅๆฏsortedๅง