leetCode第33题
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]区间的情况。