class Solution {
public int search(int[] nums, int target) {
int low =0;
int high = nums.length-1;
// 注意条件是 low<=high
while(low <= high) {
// [3,1] target 是 1 的情况,如果这里没有 +1,low,mid是0,那high=mid-1就是-1了
int mid = (low+high+1)/2;
if (target == nums[mid]) {
return mid;
}
// 翻转点在前半部分。后半部分是单调递增的
if (nums[mid] <= nums[low]) {
// 后半部分是单调递增的。这里是去后半部分的情况
if (target > nums[mid] && target <= nums[high]) {
low = mid+1;
}
else {
high = mid-1;
}
}
// 翻转点在后半部分+正好在中点。前半部分是单调递增的。
else {
// 前半部分是单调递增的。这里是去前半部分的情况
if (target >= nums[low] && target< nums[mid]) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
}
return -1;
}
}