# 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

image-20210830150201234

# 思考:

根据题意已知,二维数组从左往右递增,从上往下递增,所以得出以下结论:

某列的某个数字,该数之上的数字,都比其小; 某行的某个数字,该数右侧的数字,都比其大; 所以,解题流程如下所示:

以二维数组左下角为原点,建立直角坐标轴。 若当前数字大于了查找数,查找往上移一位。 若当前数字小于了查找数,查找往右移一位。

二维数组中的查找

var findNumberIn2DArray = function(matrix, target) {
    // 设置边界
    if(!matrix.length) return false;
    // 初始化右下角设置坐标
    let x = matrix.length - 1, y = 0;
    // 当x轴大于等于0 && y轴小于二维数组长度
    while(x >= 0 && y < matrix[0].length ){
        // 如果当前值 大于 目标值
        if(matrix[x][y] === target){
            return true;
        }else if(matrix[x][y] > target){
            // x轴上移 
            x--;
        }else{
            y++;
        }
    }
    return false;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
最后更新时间: 6/20/2022, 10:48:50 PM