转化为两次二分。
java
class Solution {
public int search(int[] nums, int target) {
int l = 0, r = nums.length - 1;
// 找到分隔点,大于nums[0]的最后一个数(最大的数)
while(l < r){
int mid = l + r + 1 >> 1;
if(nums[0] > nums[mid]) r = mid - 1;
else l = mid;
}
if(nums[0] > target) r = nums.length - 1;
else l = 0;
// 在有序数组中找目标值
while(l < r){
int mid = l + r + 1 >> 1;
if(nums[mid] > target) r = mid - 1;
else l = mid;
}
return nums[l] == target ? l : -1;
}
}