zoukankan      html  css  js  c++  java
  • 力扣剑指offer——二维数组查找

    二维数组中的查找

      在一个 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。

      遍历所有数组元素这种比较笨的方法就不写了

      按照题目要求,数组的特点是:每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。可以选择从左下角或者右上角开始比较,然后改变行列再次比较即可

    var findNumberIn2DArray = function(matrix, target) {
        const rowNum = matrix.length;
        if (!rowNum) {
            return false;
        }
        const colNum = matrix[0].length;
        if (!colNum) {
            return false;
        }
    //从右上角往下找
        let row = 0,
            col = colNum - 1;
        while (row < rowNum && col >= 0) {
            if (matrix[row][col] === target) {
                return true;
            } else if (matrix[row][col] > target) {
                --col;
            } else {
                ++row;
            }
        }
    
        return false;
    };
    

      最优解:通过比较大小确定所在行的位置,通过includes方法快速查找

    var findNumberIn2DArray = function(matrix, target) {
        if(matrix.length === 0) return false
        let flag = false
        for(let i = matrix.length - 1; i >= 0; i--) {
            if(target >= matrix[i][0]){
                if(matrix[i].includes(target)) {
                    flag = true
                    break
                }
            }
        }
    
        return flag
    };
    

      

  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/spoem/p/12838434.html
Copyright © 2011-2022 走看看