思路一
每一行都做二分
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix.length==0 || matrix[0].length==0) return false;
int m=matrix.length;
int n=matrix[0].length;
for(int i=0;i<m;i++)
{
int low=0;
int high=n-1;
while(low<=high)
{
int mid=(low+high)/2;
if(target==matrix[i][mid]) {return true;}
if(target>matrix[i][mid]) {low=mid+1;}
if(target<matrix[i][mid]) {high=mid-1;}
}
}
return false;
}
}
思路二 官方解
先和右上角的点比较,即与matrix[0][n-1]
如果num比target大,向左,column-1
如果num比target小,向下,row+1
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int rows = matrix.length, columns = matrix[0].length;
int row = 0, column = columns - 1;
while (row < rows && column >= 0) {
int num = matrix[row][column];
if (num == target) {
return true;
} else if (num > target) {
column--;
} else {
row++;
}
}
return false;
}
}