题目描述
// 04. 二维数组中的查找
// 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,
// 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的
// 一个二维数组和一个整数,判断数组中是否含有该整数。
// 限制:
// 0 <= n <= 1000
// 0 <= m <= 1000
题解
// 时间复杂度 O(M + N): 18 ms
// 空间复杂度 O(1): 43.1 MB
// 从矩阵右上角开始遍历,则左边的数一定比右边的数小,
// 下边的数一定比上面的数大。
// 比较遍历数和target。
// 若遍历数大,target小,说明target在遍历数左边,遍历位置左移。
// 如果遍历数小,target大,说明target在遍历数下面,遍历位置下移
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
// 排除特殊情况
if (matrix == null || matrix.length <= 0 || matrix[0].length <= 0) {
return false;
}
// 取matrix的行和列
int rows = matrix.length, cols = matrix[0].length;
// 初始化遍历起始点索引,起始点为右上角
int i = 0, j = cols-1;
while (i <= rows-1 && j >= 0) {
System.out.println(i + " " + j);
if (matrix[i][j] == target) { return true;}
if (matrix[i][j] < target) {
i++;
}
// 防止之前i移动在先,造成越界,加一个i的不越界判定
if (i <= rows-1 && matrix[i][j] > target) {
j--;
}
}
return false;
}
}