二维数组中的查找(杨氏矩阵(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))的主要内容,如果未能解决你的问题,请参考以下文章