在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
主要问题在于怎么缩小搜索区间。如果从(0, 0)开始,会发现不管可行的两个方向都是变大,那么这个时候就没法确定到底往那个方向缩减区间。但是换个出发点,比如(0, cols-1),豁然开朗。
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int rows = matrix.length;
if(rows == 0) return false;
int cols = matrix[0].length;
int cur_row = 0;
int cur_col = cols-1;
while(cur_row<rows && cur_col>=0)
{
if(matrix[cur_row][cur_col] == target)
return true;
else if(matrix[cur_row][cur_col] > target)
cur_col--;
else
cur_row ++;
}
return false;
}
}