public int search(int[] nums, int target) {
// 第一段满足第二段不满足 x>=nums[0],边界点就是满足这个性质的最后一个数字
int l = 0, r = nums.length-1;
while (l < r) {
int mid = l + r+1 >> 1;
// 找到最后一个>=nums[0]的数字
if(nums[mid] >= nums[0]) l = mid; // 向左搜索
else r = mid-1;
}
if(target >= nums[0]) l = 0;
else {
l = r + 1;
r = nums.length-1;
}
while (l < r) {
int mid = l+r >>1;
// 找到第一个大于等于target的数字
if(nums[mid] >= target) r = mid;
else l = mid +1;
}
// l初始化时可能越界,所以这里返回的是r
if(nums[r] != target) return -1;
else return r;
}