1. 题目
2. 解题思路
矩阵满足:每行从左到右递增、每列从上到下递增。
关键观察 :取右上角 元素 x = matrix[r][c]
:
- 若
x == target
→ 找到; - 若
x > target
→ 这一列下面都 ≥x
,更不可能,因此向左 移动(c--
)缩小列; - 若
x < target
→ 这一行左边都 ≤x
,更不可能,因此向下 移动(r++
)扩大行。
这样每一步都能排除一整行或一整列,直到越界或找到为止。
3. 代码
3.1. 完整代码
java
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int row = 0;
int col = n - 1;
while (row < m && col >= 0) {
int x = matrix[row][col];
if (x == target) {
return true;
}
if (x > target) {
col--;
} else if (x < target) {
row++;
}
}
return false;
}
}