欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1、剑指offer之二维数组的查找,题目解析和java实现方法

程序员文章站 2022-05-20 10:56:08
...

题目描述


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

要求

时间限制:1秒 空间限制:32768K


题目解析

输入参数是一个二位数组和一个整数,其中二维数组每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
因此可以从数组的左下角开始查找,每查找一个元素判断目标数字是否与当前数组的元素相等。(从右上角开始查找亦可)。

1)若相等返回true结果。
(2)若目标数字大于当前数组元素的值,则向右移动一列查找。
(3)若目标数字小于当前数组元素的值,则向上移动一行查找。

可能有人会问,问什么不能从左上角或者右下角开始查找,这是因为需要确定
唯一移动的方向。假如我们一开始是从左上角开始查找,具体输入参数如下图所示,目标数字9大于左上角1,而数组向右和向下都是递增的,所以该向右移动一列还是向下移动一行来查找呢,这时就出现了混淆。从右下角开始查找同理。

输入参数的情况参考下图:
1、剑指offer之二维数组的查找,题目解析和java实现方法

具体的实现算法如下(java):

public boolean Find(int target, int [][] array) {
        boolean result = false;
        int row = 0;//行数
        int col = 0;//列数
        int i,j;//i,j分别记录当前行和列
        row = array.length;
        col = array[0].length;

        //从左上角开始遍历
        for(i=row-1,j=0;i>=0&&j<col;){
            //判断目标值是否等于于当前元素值
            if(target == array[i][j]){
                result = true;
                return true;
            }
            //判断目标值是否大于当前元素值
            if(target > array[i][j]){
                j++;
                continue;
            }
            //判断目标值是否小于于当前元素值
            if(target < array[i][j]){
                i--;
                continue;
            }
        }
        return false;
    }
相关标签: 二维数组