剑指offer —— 二维数组的查找

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

2.思路:只看题目本身,可能不是这么直观(如果一眼就能得出规律的.....我觉得没有看下去的必要了....),

             首先我们可以自己来一个符合题目条件的二维数组,用来寻找规律:

        

             从图上可以很容易的看出来:在数组中,无论是哪一个数,它总是比右边的数小(或等于),总是比上面的数大。其实题目本身就是想告诉我们这个。

      除了上述之外,我们还需要知道: 对于 int[][] a = {{}},得出 a.length = 1 以及 a[0].length = 0 ;  对于 int[][] a = {},得出 a.length = 0 以及 a[0].lenght = 0。这是用来判断是否有必要查找。

3.代码:

    public boolean find(int target, int [][] array) {
        
        //1.判断行和列的长度
        if(array.length == 0 || array[0].length == 0){
            return false;
        }
        
        //2.获取行和列的长度
        int rowLen = array.length;
        int colLen = array[0].length;    
        
        //3.开始遍历查找,从左下角开始查找,大于指定的整数:上移,小于指定的整数:下移
        for(int i = rowLen-1,j = 0; i >= 0 && j < colLen ; ){
            if(array[i][j] == target){
                return true;
            }else if(array[i][j] > target){
                i--;
            }else{
                j++;
            }
        }
        
        //4.最后说明没有找到
        return false;
    }

      

posted @ 2018-05-04 12:34  君子如珩~  阅读(139)  评论(0编辑  收藏  举报