最直接的想法: 遍历二维数组,找到target
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length, col = matrix[0].length;
for (int i = 0; i < row; i++) {
if (matrix[i][0] > target) {
row = i;
break;
}
}
for (int j = 0; j < col; j++) {
if (matrix[0][j] > target) {
col = j;
break;
}
}
for (int i = row - 1; i >= 0; i--) {
for (int j = col - 1; j >= 0; j--) {
if (matrix[i][j] == target) return true;
}
}
return false;
}
}
根据题意进行优化:
从左往右递增,从上往下递增,那么可以从左上角开始找
1.若matrix[i][j] == target,则返回true
2.若matrix[i][j] > target,target比当前值小,应该往左边找
3.若matrix[i][j] < target,target比当前值大,应该往下面找
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length, col = matrix[0].length, i = 0, j = col - 1;
while (i < row && j >= 0) {
if (matrix[i][j] == target) return true;
if (matrix[i][j] > target) {
j--;
} else {
i++;
}
}
return false;
}
}