题目:
题解:
一个可行的思路是使用~01~泛型对每一行的最后一个元素进行查找找到第一个大于等于target的那一行,判断查找结果如果“失败”返回false否则继续在改行进行常规二分查找target的值根据查找结果返回即可。
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int l=0,r=matrix.size()-1,mid;
while(l<r){
mid=(l+r)>>1;
if(matrix[mid][matrix[0].size()-1]>=target)r=mid;
else l=mid+1;
}
if(matrix[l][matrix[0].size()-1]<target)return false;
int ind=l;
l=0,r=matrix[0].size()-1;
while(l<=r){
mid=(l+r)>>1;
if(matrix[ind][mid]==target)return true;
else if(matrix[ind][mid]>target)r=mid-1;
else l=mid+1;
}
return false;
}