题中每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。遇到这种有序数据可以先考虑贪心的思想,通过观察知道先取左下角的元素matrix[x][y](其中x = matrix.length,y = 0)具有这样的特点,即与它同一行的右边所有数据都比它大,与它同一列的上边边所有数据都比它小。
因此拿target和matrix[x][y]作比较,如果target小于matrix[x][y],那么matrix[x][y]右边的所有数据都大于target可以排除,因此再定位到matrix[x - 1][y]元素;如果target大于matrix[x][y],那么matrix[x][y]上边的所有数据都大于target可以排除,因此再定位到matrix[x][y + 1]元素。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if(matrix.length == 0)
return false;
if(matrix[0].length == 0)
return false;
int n = matrix.length;
int m = matrix[0].length;
int x = n - 1, y = 0;
while(x >= 0 && y < m){
if(matrix[x][y] > target){
--x;
}else if(matrix[x][y] < target){
++y;
}else{
return true;
}
}
return false;
}