二维数组中的查找(杨氏矩阵(C语言+Java))

Posted 爱敲代码的三毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组中的查找(杨氏矩阵(C语言+Java))相关的知识,希望对你有一定的参考价值。

二维数组中的查找这道题,出自 《剑指Offer》。也是著名的杨氏矩阵


在一个 n *m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的。输入一个数,判断矩阵中是否存在这个数。

思路

最简单的思路大家都是能想到的,就是 for循环嵌套遍历整个二维数组,这种做法效率太低,不建议。

因为这个矩阵,从左往右是递增,从上至下也是递增的,而且发现一个特点,就是这样的矩阵右上角的数是当前行最大的也是当前列中最小的。我们就可以从右上角入手。

1.当要找的数字比当前位置的数大的时候,因为矩阵是从左到右递增,只需要 列-- 就能排除掉一列,列–相当于从右往左走

2.当要找的数字比当前位置的数小的时候,因为矩阵是从上至下递增的,只需要 行++ 直接就能排除掉一行,行++相当于从上往下走。

如果要在下面的矩阵中查找7,我们从右上角的9开始,和要查找的数做比较

C语言代码

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target)
    if (matrixSize == 0 || *matrixColSize == 0)
    
        return false;
    
    int i = 0;//行
    int j = *matrixColSize-1;//列

    while (i < matrixSize && j >= 0)
    
        if (matrix[i][j] > target)
        
            //如果当前位置的值比要找的值大,那么要找的值肯定在这一行
            j--;
        else if (matrix[i][j] < target)
        
            //如果要找得值比当前值要小,说要找的值不在当前行
            i++;
        else
            return true;
        
    
    //走到这里说明没有找到
    return false;

Java代码

public  boolean findNumberIn2DArray(int[][] matrix, int target) 
        if (matrix == null || matrix.length == 0) 
            return false;
        
        int i = 0;
        int j = matrix[0].length-1;
        while (i < matrix.length-1 && j >= 0) 
            if (matrix[i][j] > target) 
                //如果当前位置的值比要找的值大,那么要找的值肯定在这一行
                j--;
            else if (matrix[i][j] < target) 
                //如果要找得值比当前值要小,说要找的值不在当前行
                i++;
            else 
                return true;
            
        
        //走到这里说明没有找到
        return false;
    

题目链接 二维数组中的查找

以上是关于二维数组中的查找(杨氏矩阵(C语言+Java))的主要内容,如果未能解决你的问题,请参考以下文章

杨氏矩阵查找实现

C语言编程 在杨氏数组中查找数字

杨氏矩阵查找

杨氏矩阵的简单介绍与查找算法

C语言进阶之旅 (每日一题)杨氏矩阵

在杨氏矩阵中查找一个数字是否存在