解题思路:
二分查找
题外话:为什么while循环中使用<=号而不是用<号,假如while循环体中不包含等号,那么left==right且值等于target的情况会被忽略,漏解。
class Solution {
public:
//二分查找
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size(),n=matrix[0].size();
//假如target<matrix[0][0]||target>matrix[m-1][n-1],返回false
if(target<matrix[0][0]||target>matrix[m-1][n-1])
return false;
for(int i=0;i<m;++i){
if(target>=matrix[i][0]&&target<=matrix[i][n-1]){
if(bsearch(matrix[i],target))
return true;
}
if(target<matrix[i][0])
break;
}
return false;
}
bool bsearch(vector<int>& vec,int target){
int left=0,right=vec.size()-1;
int mid;
while(left<=right){
mid=left+(right-left)/2;
if(vec[mid]==target)
return true;
else if(vec[mid]<target)
left=mid+1;
else
right=mid-1;
}
return false;
}
};