
思路
- 左下角的元素是这一行中最小的元素,同时又是这一列中最大的元素。比较左下角元素和目标:
- 若左下角元素等于目标,则找到
- 若左下角元素大于目标,则目标不可能存在于当前矩阵的最后一行,问题规模可以减小为在去掉最后一行的子矩阵中寻找目标
- 若左下角元素小于目标,则目标不可能存在于当前矩阵的第一列,问题规模可以减小为在去掉第一列的子矩阵中寻找目标
- 若最后矩阵减小为空,则说明不存在
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int i = m - 1;
int j = 0;
while (i >= 0 && j < n) {
if (matrix[i][j] == target) {
return true;
} else if (target > matrix[i][j]) {
j++;
} else if (target < matrix[i][j]) {
i--;
}
}
return false;
}
}