编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
要求
- 找数
分析
- 特殊情况处理,处理空,矩阵长度为零的情况
- 思考寻找target的方式,for循环还是while,介于明确的目标使用while
- 因为题目给予了排序那么需要判断他们在哪一行哪一列
代码
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
/*
* 思路:
* 从矩阵的右上角开始搜索,如果当前元素大于目标值,则向左移动一列;
* 如果当前元素小于目标值,则向下移动一行。
*/
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int m = matrix.length;
int n = matrix[0].length;
// 从矩阵的右上角开始搜索
int row = 0;
int col = n - 1;
while (row < m && col >= 0) {
if (matrix[row][col] == target) {
return true;
} else if (matrix[row][col] > target) {
// 如果当前元素大于目标值,则向左移动一列
col--;
} else {
// 如果当前元素小于目标值,则向下移动一行
row++;
}
}
return false;
}
}
