剑指offer 面试题2 二维数组中的查找

 题目要求:  在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组合一个整数,判断数组中是否含有该整数。

例如: 下面的实际的例子;

   例如矩阵

      1  2  8  9

      2  4  9  12

      4  7  10  13 

      6  8  11  15

求解问题的思路是这样的:   先找规律,当我们需要解决一个复杂的问题的时候,一个很有效的办法就行从一个具体的问题下手,通过分析简单具体的例子,试图寻找普遍的规律。

通过研究,我们发现下面的规律:首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束:如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每一次都在数字的查找范围内剔除一行或者一列。逐步缩小查找范围,一直到找到查找的数字,或者查找范围为空。

代码实现如下:

public class Solution {
    public boolean Find(int [][] array,int target) {
        if(array == null)
            return false;

        int rowCount = array.length;
        int colCount = array[0].length;

        // 从右上角开始比较
        int row = 0;
        int col = colCount - 1;
        while(row < rowCount && col >= 0) {
            int val = array[row][col];
            if(val < target)
                row++;
            else if(val > target)
                col--;
            else
                return true;
        }
        return false;
    }
}

参考  

剑指offer    何海涛著   电子工业出版社

猜你喜欢

转载自blog.csdn.net/qauchangqingwei/article/details/80797584