cpp
int search(vector<int>& nums, int target) {
int n = nums.size();
int left = 0,right = n-1;
while(left<=right)
{
int mid =left + (right - left)/2;
if(nums[mid]==target){
return mid;
}
if(nums[left]<=nums[mid]){//说明是单调区间
if(nums[mid]>target&&target>=nums[left]){
right=mid-1;
}else{
left=mid+1;
}
}else{//mid跨区间
if(nums[mid]<target&&target<=nums[right]){//当跨区间时用单调区间的条件去修改left和right的值比较简单
left=mid+1;
}else{
right=mid-1;
}
}
}
return -1;
}
重点在大的if else 分支语句中mid落在区间中的位置 有两种情况对应着if else语句分支

left,mid\]区间要么落在单调区间要么落在非单调区间,在对应的区间也对应着外面的if else语句的两种情况。内部的if else语句则是target落在\[left,mid\]区间的情况。