按题目的意思是有效率的算法,我放下了我暴力ac的冲动。。别人的思路很好,首先遍历二维数组每行的开头,找到比target小的最大行,然后对哪一行进行二分查找,在写代码时请尤其注意下标越界的问题
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int n=matrix.size();
if(!n)return false;
int m=matrix[0].size();
if(!m)return false;
int row_index=0;
while(row_index+1<n&&matrix[row_index+1][0]<=target)++row_index;
int i=0;
int j=m-1;
while(i<=j){
int mid=(i+j)/2;
if(matrix[row_index][mid]==target)return true;
else if(matrix[row_index][mid]<target)i=mid+1;
else j=mid-1;
}
return false;
}
};