剑指offer-二维数组查找

二维数组中的查找

https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

二维数组的查找

问题

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路

由于每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。所以 二维数组右上角比左及左下角的数大;可以取数组的右上角进行比较:
若查找目标比右上角数小,那么查找目标一定不在所取右上角数的下方或右下方,继续取所取右上角数左边相邻元素( target < 所取右上角数 < 右上角数右下方数);若查找目标比右上角数大,即所取右上角数比查找目标小,所取右上角数左边也比ta小,( 右上角左边数 < 右上角数 < target );
通过一步步缩小查找的数组,最后得出结果。

代码

public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array == null)
            return false;
        if(array.length == 0)
            return false;
        if(array[0].length == 0)
            return false;
        int rows = array.length, columns = array[0].length;
        int row = 0, column = columns-1;
        while(row<rows && column >= 0){
            if(target == array[row][column])
                return true;
            else if(target < array[row][column])
                column--;
            else 
                row++;
        }
        return false;
    }
}

犯错

Java的数组长度为0也能被实例化,未考虑此处导致产生空指针异常。

全部评论

相关推荐

秋国🐮🐴:拿到你简历编号然后让你知道世间险恶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务