剑指 Offer 04. 二维数组中的查找

97 阅读1分钟

剑指 Offer 03. 二维数组中的查找

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

示例:

现有矩阵 matrix 如下:

[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。

给定 target = 20,返回 false。


const findNumberIn2DArray = (matrix, target) => {
    if (!matrix.length) return false;
    // 定义左下角的坐标
    let [row, col] = [matrix.length - 1, 0];
    const len = matrix[0].length;
    // 坐标在矩阵内,就一直寻找
    while (row >= 0 && col <= len - 1) {
        // 当前元素
        const item = matrix[row][col];
        if (item === target) {
            // 找到,返回true
            return true;
        } else if (item > target) {
            // 太大了,上移一行
            row--;
        } else {
            // 太小了,右移一列
            col++;
        }
    }
    return false;
};