剑指Offer 二维数组中的查找

题目描述:

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

    解题思路:由于每一行和每一列都是已经排好序了的,如果在这一行的最后一个元素比目标值还要小的话,那么这一行的所有书都比目标值小;同理如果一列中的第一个元素都比目标值大的话,那么这一列的所有元素都比目标值大。因此我们只需要判断目标值和二维矩阵右上角的元素的值的大小就可以决定删除行还是列了,如果相等那么就找到了。具体代码如下:

public class Solution {
    public boolean Find(int target, int [][] array) {
        int Size = array.length;
        int l = array[0].length;
        if(Size<1||l<1)//注意此处的判断条件防止数组中没有任何元素
            return false;
        if(target<array[0][0]||target>array[Size-1][l-1])
            return false;
        int x=0,y=l-1;
        while(true){

            if(target<array[x][y]){
                x=x;
                y-=1;
            }else if(target > array[x][y]){
                x+=1;
                y=y;
            }
            if(x>=Size||y<0)//此处已经超过了数组的边界
                return false;
            if(target==array[x][y])
                return true;
    }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值