Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted in ascending from left to right.
- Integers in each column are sorted in ascending from top to bottom.
Example:
Consider the following matrix:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Given target = 5
, return true
.
Given target = 20
, return false
.
Note
We can start from the right top corner of the matrix, and compare the element value with the target. If the current element is larger than the target, then it means the target can’t be at that column, if the current element is smaller than the target, it means that the target can’t be at that row.
Solution
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0) {
return false;
}
int row = 0, col = matrix[0].length - 1;
while (row < matrix.length && col >= 0) {
if(matrix[row][col] == target) {
return true;
}
if (matrix[row][col] > target) {
col--;
} else {
row++;
}
}
return false;
}
}