题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数。
解题思路
解法说明:
- 先选取数组中右上角的数字,如果数字等于要查找的数字,查找结束;
- 如果右上角的数字大于要查找的数字,则要查找的数字比右边列的所有数字都小,去掉这一列;
- 如果右上角的数字小于要查找的数字,则要查找的数字比这一行的所有数字都大,去掉这一行;
- 循环查找,直到找到要查找的数字或者数组为空为止。
下图展示了目标值为7的查找过程:
代码
public static boolean findFromMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int compareNum;
if (m > 0 && n > 0) {
int row = 0;
int column = n - 1;
while (row < m && column >= 0) {
compareNum = matrix[row][column];
if (compareNum == target) {
return true;
} else if (compareNum > target) {
column--;
} else {
row++;
}
}
}
return false;
}