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

目前研三,毕业在即,之前做Android开发,现在想转到后台开发,却发现算法部分太过欠缺,所以就去博客上看别人写的剑指offer题的见解。声明,我这里只是针对别人写的,自己敲一遍代码,然后发表出来,算是自己的日记,方便日后复习浏览。并无他意。


二维数组中的查找

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

实现思路:因为这个数组很特殊,每一行,右边的数大于左边的数,每一列,下面的数大于上面的数。我们选择最右上角的数开始查找,跟输入的数字number做比较,如果最右上角的数字大于number,说明当前数字这一列肯定不存在number,去掉这一列。如果最右上角的数字小于number,说明number肯定不在这一行,去掉这一行,就这样逐渐缩小数组,直到等于number为止,或者不存在。

代码示例:

//二维数组查找
    public static boolean findNumber(int[][] array, int number) {
        //对数组进行合法性判断
        if (array == null || array.length < 1 || array[0].length < 1) {
            return false;
        }
        int lines = array.length;//line number
        int columns = array[0].length;// column number
        int line = 0;//第一行
        int column = columns - 1;//最后一列
        while (line >= 0 && line < lines && column >= 0 && column < columns) {
            if (array[line][column] == number) {
                return true;
            } else if (array[line][column] > number) {
                column--;
            } else {
                line++;
            }
        }
        return false;
    }




你可能感兴趣的:(剑指offer)