zoukankan      html  css  js  c++  java
  • 剑指 Offer 04. 二维数组中的查找

    题目

    在一个 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. 暴力法
         * @param matrix
         * @param target
         * @return
         */
        public static boolean findNumberIn2DArray(int[][] matrix, int target) {
            if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
                return false;
            }
            int n = matrix.length, m = matrix[0].length;
    
            for (int i = 0; i < n ; i++) {
                for (int j = 0; j < m ; j++) {
                    if(matrix[i][j] == target)
                        return true;
                }
            }
            return false;
        }
    

    找规律

        /**
         * 找规律: 在所列举的例子中,如果 我们想判断二维数组是否存在元素13,可以通过如下过程:
         * 1. 将13 和右上角的15比较,15 > 13, 由于15是这一列最小的数,所以第5列的其他元素肯定没有13.剔除第5列
         * 2. 将13 和 剩下列的右上角的11比较, 13 > 11, 由于11是余下矩阵中这一行最大的元素,所以 11 这一行不可能有13,剔除第1行
         * 3. 将13 和 余下矩阵中的右上角元素12比较, 13 > 12, 12 是这一行最大元素,剔除第2行
         * 4. 将13 和 余下矩阵中的右上角元素 16比较, 16 > 11 , 11 这一列不可能有12, 剔除第4列
         * 5. 将13 和 余下矩阵中的右上角元素9比较, 11 > 9, 剔除第3行
         * 6. 将13 和 14 比较,14 > 13 ,剔除第3列
         * 7. 将13 和 13 比较 13 = 13  找到元素,返回true。
         * @param matrix
         * @param target
         * @return
         */
        public static boolean findNumberIn2DArray2(int[][] matrix, int target) {
            if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
                return false;
            }
            int n = matrix.length, m = matrix[0].length;
    
            int row = 0, col = m - 1;
            while(row < n && col >= 0){
                if(matrix[row][col] == target)
                    return true;
                else if(matrix[row][col] > target)
                    --col;
                else
                    ++ row;
            }
            return false;
        }
    
  • 相关阅读:
    第一轮冲刺团队评分
    意见汇总
    各组对我组的评价
    对各项目评价建议
    【每日Scrum】第十天冲刺
    【每日Scrum】第九天冲刺
    SQL-插入的方法
    Random
    基本测试理论
    web项目工作流程
  • 原文地址:https://www.cnblogs.com/sinlearn/p/14959811.html
Copyright © 2011-2022 走看看