在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
来源:《剑指Offer》
解题思路
由于矩阵本身是左小右大, 上小下大, 所以如果先从最右上角的数字开始比较
int i = 0; int j = matrix[0].length - 1;
如果该数等于目标数, 直接返回
如果该数小于目标数, 由"左小右大"的特性, 该数所在行所有数都小于目标数, 则直接忽略该行, 将比较的数位置往下挪一行i++
如果该数大于目标数, 由"上小下大"的特性, 该数所在列所有数都大于目标数, 则直接忽略该列, 将比较的数位置往左挪一列j--
代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
// i和j初始化定义为矩阵最右上角
int i = 0;
int j = matrix[0].length - 1;
while (i < matrix.length && j >= 0) {
if (matrix[i][j] == target) {
return true;
} else if (matrix[i][j] > target) {
j--;
} else {
i++;
}
}
return false;
}
}