二维数组中的查找

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

当我拿到这个题的时候,第一反应是循环,挨个判断不就可以了,看了后面的解析才知道,看来是我太low了。
看看正确的吧,逐步缩小查找范围:

public class TwoDimArry {

    public static void main(String[] args) {

        int  ayys[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
        System.err.println(findNumber(ayys,4,4,10));
    }

    private static boolean findNumber(int[][] array, int rows, int colums, int num) {
        boolean isExit = false;
        if (array != null && rows > 0 && colums > 0) {
            int row = 0;
            int colum = colums - 1;
            while (row < rows && colum >= 0) {
                if (array[row][colum] == num) {
                    isExit = true;
                    break;
                } else if (array[row][colum] < num) {
                    row++;

                }else if(array[row][colum] >num) {
                    colum--;
                }
            }
        }
        return isExit;
    }
}

整体的思路是先取右上角的最大数,如果比这个数大,那么下一步应该去该数的这一列寻找,比这个数小应该去前一行的第一个数比较,逐步的缩小范围,防止有重复的数字进行过比较。大多数同学在思考的时候就会忽略while中条件,row < rows && colum >= 0这个条件,一般会想不到,或者不知道怎么写。主要是缺乏整体的思考和对自己查询的不知道操作有关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值