class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = (right + left) / 2;
if (target == nums[mid]) return mid;
if (nums[mid] >= nums[left]) { // 左半边有序
if (target > nums[mid]) left = mid + 1;
else {
if (target == nums[left]) return left;
else if (target > nums[left]) {
left = left + 1;
right = mid - 1;
} else left = mid + 1;
}
} else { // 右半边有序
if (target < nums[mid]) right = mid - 1;
else {
if (target == nums[right]) return right;
else if (target < nums[right]) {
left = mid + 1;
right = right - 1;
} else right = mid - 1;
}
}
}
return -1;
}
}