intsearch(vector<int>& nums,int target){int len =(int)nums.size();int left =0, right = len -1;while(left<=right){int mid =(left + right)>>1;if(nums[mid]==target)return mid;if(nums[0]<=nums[mid]){//此时左半部分是有序的//检查左侧最小值是否小于target,大于则跳到右侧if(nums[0]<=target&&nums[mid]>target){
right = mid-1;}else{
left = mid+1;}}else{//此时右半部分是有序的//检查右半部分最大值是否大于target,小于则跳到左侧if(nums[len-1]>=target&&nums[mid]<target){
left = mid +1;}else{
right = mid -1;}}}return-1;}
3.搜索二维矩阵(Q74)
题目描述:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值
思路:先判断每行的首个元素,找定行区间,再进行二分查找
boolsearchMatrix(vector<vector<int>>& matrix,int target){int col_len =(int)matrix.size();int begin = col_len-1;for(int i=0;i<col_len;i++){if(matrix[i][0]>target){
begin = i -1;break;}}if(begin<0)returnfalse;int left =0, right =(int)matrix[begin].size()-1;while(left<=right){int mid =(left+right)/2;if(matrix[begin][mid]==target)returntrue;if(matrix[begin][mid]>target){
right = mid-1;}else{
left = mid+1;}}returnfalse;}