从右上角往左下角进行查找可以解决这个问题,不过我不想那么做,所以做了两次二分法,先行二分再列二分
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int m = matrix.size();
int left=0,right = 0,mid = 0,row=0;
if(m==0) return false;
int n = matrix[0].size();
if(n==0) return false;
right = m-1;mid = (left+right)/2;
if(target<matrix[0][0]||target>matrix[m-1][n-1]) return false;
while((left!=right-1)&&right!=0){
if(matrix[mid][0]<target){
left = mid;
mid = (left+right)/2;
}
else if(matrix[mid][0]>target){
right = mid;
mid = (left+right)/2;
}
else return true;
}
if(matrix[right][0]==target||matrix[left][0]==target) return true;
if(target>matrix[right][0]) left =right;
row = left;left = 0;right = n-1;mid = (left+right)/2;
while(left!=right-1&&right!=0){
if(matrix[row][mid]<target){
left = mid;
mid = (left+right)/2;
}
else if(matrix[row][mid]>target){
right = mid;
mid = (left+right)/2;
}
else return true;
}
if(matrix[row][right]==target||matrix[row][left]==target) return true;
return false;
}
};