public boolean findNumberIn2DArray(int[][] matrix, int target){
int i=matrix.length-1;
int j=0;
while(i>=0&&j<matrix[0].length){
if(matrix[i][j]>target) i--;
else if(matrix[i][j]<target) j++;
else return true;
}
return false;
}
方法二:二分查找
题目参考力扣74
思路:先确定行,再确定是哪一列。在二分查找中找到小于等于target的数中index最大的。
public boolean searchMatrix(int[][] mat, int t){
int m=mat.length;
int n=mat[0].length;
int left=0;
int right=m-1;
while(left<right){
int mid=left+(right-left+1)/2;
if(mat[mid][0]>t){
right=mid-1;
}
else{
left=mid;
}
}
int row=left;
if(mat[row][0]==t) return true;
if(mat[row][0]>t) return false;
left=0;
right=n-1;
while(left<right){
int mid=left+(right-left+1)/2;
if(mat[row][mid]>t){
right=mid-1;
}
else{
left=mid;
}
}
return mat[row][left]==t;
}