数组oj --->二维数组中的查找

Posted ohana!

tags:

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

题目内容:

分析:

  • 首先题目中有个最重要的信息,从上到下依次增大,从左到右依次增大
  • 对于任意一个数组类型的题目,暴力法基本都可以提供一部分解法,但,暴力法很可能不是最优解,所以,这道题目是寻找一个元素,当然可以暴力遍历
  • 再来说说优化解法,根据所给二维数组的特性,我们可以从此入手
  • 记录左下角的元素为flag,即标志数,若target > flag,说明肯定不在flag所在的这一列,反之,那么肯定就不在flag所在的这一行

解题代码:

class Solution 
    public boolean findNumberIn2DArray(int[][] matrix, int target) 
        //我们定义从左下角开始,所以i就为左下角第一个元素即为最后一行
        //j为第一列就是0
        int i = matrix.length - 1;
        int j = 0;
        //这里对于循环条件也很清楚,只要i不小于0,j不大于一行元素的最大的下标
        //那么就说明,这个二维数组依然没有遍历完
        while(i >= 0 && j < matrix[0].length)
            //如果这个数字比要查找的数字大,那说明肯定不在这一行,i--;
            //同理就是j--;
            if(matrix[i][j] > target)
                i--;
            else if(matrix[i][j] < target)
                j++;
            else
                return true;
            
        
        return false;
    

以上是关于数组oj --->二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章

oj---九度oj---1433

oj---九度oj---1434

oj---九度oj---1015

oj---九度oj---1054

oj--九度oj---1431

oj---九度oj---1078