剑指 Offer 04. 二维数组中的查找

二维数组中的查找

可以直接用两层for循环的蠢办法。。。。(不建议这么做,蠢)

尽可能的多利用题目中的条件。

解题思路

首先选取数组右上角的数字,

在这里插入图片描述

从右上角或者从左下角开始都是一样的。
代码我是从左下角开始的

注意:不能用三个并列的if(每次移动后就得判断越界)
注意边界情况:col>=0&&row<rows

package swordPointingToTheOffer;

public class four {
    public static boolean findNumberIn2DArray(int[][] matrix, int target) {
        //矩阵不符合正常的条件
        if(matrix==null||matrix.length<=0||matrix[0].length<=0){
            return false;
        }
        //行
        int cols = matrix.length;
        //列
        int rows = matrix[0].length;

        //从左下角开始查找
        int col = cols -1;
        int row = 0;

        //在合理的下标范围下,做矩阵元素的查找(不能用三个并列的if(每次移动后就得判断越界))
        while (col>=0&&row<rows){
            if(target>matrix[col][row]){
                //右移
                row++;
            }else if(target<matrix[col][row]){
                //上移
                col--;
            }else {
                //找到了元素
                return true;
            }
        }
        //查找不到元素的情况
        return false;
    }

    public static void main(String[] args) {
        int [][]matrix1 = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
        System.out.println(matrix1.length);    //行
        System.out.println(matrix1[0].length); //列

        int [][]matrix={{1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30}};

        System.out.println(findNumberIn2DArray(matrix,20));

        System.out.println("判断边界情况");
        int [][]matrix3={{-5}};
        System.out.println(matrix3.length);    //行
        System.out.println(matrix3[0].length); //列
        System.out.println(findNumberIn2DArray(matrix3,-5));

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值