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

题目

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

示例

现有矩阵 matrix 如下:
在这里插入图片描述

自己的想法

  • 就是直接二重for循环遍历,本来想着,可能也会因为复杂度太大可能会不太行,但是没想到竟然通过了?奇妙~
class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
                if(target==matrix[i][j]){
                    return true;
                }
            }
        }
        return false;
    }
}
  • 运行速度还挺快的
    在这里插入图片描述

  • 明天看看题解,还有没有其他想法了~

  • 2021年1月24日17:31:02,看了题解后,有一个想法

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        //总行数
        int hangs = matrix.length;
		//首先判断一下,二维数组是否为空,这个之前我是没加的,执行代码的时候没问题,但是提交的时候,就会出问题,提交的测试用例中有空数组。
        if(hangs==0){
            return false;
        }
		//总列数
        int lies = matrix[0].length;
        //这个是定义到第一行最后一个数字
        int hang = 0;
        int lie = lies - 1;        

        System.out.println("总行数"+hangs);
        System.out.println("总列数"+lies);
		//判断条件:抵达该数组的最后一行第一列
        while(hang<hangs&&lie>=0){
        	//目标<该位置的数字,列数减小
            if(target<matrix[hang][lie]){
                lie--;
            //目标>该位置的数字,行数增大
            }else if(target>matrix[hang][lie]){
                hang++;
            }else{
            	//找到该数字
                return true;
            }
        }        
        return false;
    }
}
  • 若没加判断空数组的条件,提交时会出错
if(hangs==0){
    return false;
}

在这里插入图片描述

  • 注:但是没想到的是,我以为第二个方法线性法,会更快一点,但是运行时间还没有第一个暴力解法快。。。。第一个0ms,第二个9ms?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值