zoukankan      html  css  js  c++  java
  • 二维数组的查找

    二维数组的查找

    在一个 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。
    
     
    
    限制:
    
    0 <= n <= 1000
    
    0 <= m <= 1000
    

    第一次做题的思考

    1. 肯定不能暴力求解
    2. 第一感觉斜着找
    3. 第二展开找,也就是再拼接一个,感觉可能性不大

    题解

    从右上角找,元素别target大,就col--,反之row++

    func findNumberIn2DArray(matrix [][]int, target int) bool {
        res := false
        if len(matrix) == 0 || matrix == nil || len(matrix[0]) == 0 {
            return res
        }
    
        col := len(matrix[0]) - 1
        row := 0
    
        var nowItem int
        nowItem = matrix[row][col]
    
        for {
            if nowItem > target {
                col--
            }
            if nowItem < target {
                row++
            }
            if nowItem == target {
                return true
            }
    
            if row == len(matrix) || col == -1 {
                return res
            }
    
            nowItem = matrix[row][col]
        }
    }
    
  • 相关阅读:
    os模块
    sys模块
    psutil模块
    subprocess模块
    time模块
    argparse模块
    tcp端口扫描(python多线程)
    基于http的软件仓库
    SRE思想
    redis哨兵模式
  • 原文地址:https://www.cnblogs.com/maomaomaoge/p/14887186.html
Copyright © 2011-2022 走看看