剑指offer_04_二维数组中的查找【javascript】

94 阅读1分钟

在一个二维数组中,每一行都按照从左到右的顺序排序,每一列到按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。

1  2  8  9
2  4  9  12
4  7  10 13
6  8  11 15
/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var findNumberIn2DArray = function(matrix, target) {
    if (matrix.length > 0 && matrix[0].length > 0) {
        let row = 0, column = matrix[0].length - 1;
        while(row < matrix.length && column >= 0) {
            if (matrix[row][column] === target) { // 从右上角开始向左、向下寻找数字
                return true;
            } else if (matrix[row][column] > target) { // 当前数字大于目标数字,减少列向左找
                --column;
            } else { // 当前数字小于目标数字,增加行,向下找
                ++row;
            }
        } 
    }
    return false;
};

复杂度分析

  • 时间复杂度:O(n+m)。访问到的下标的行最多增加 n 次,列最多减少 m 次,因此循环体最多执行 n + m 次。
  • 空间复杂度:O(1)。