第4题:二维数组中的查找

本文详细介绍了如何在二维数组中高效地查找目标数值,通过从左下角开始,使用两个指针i和j进行遍历。当目标值小于当前值时,移动i指针;当目标值大于当前值时,移动j指针。最终找到目标值返回true,未找到则返回false。这种方法避免了不必要的遍历,提高了查找效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


参考1
参考2

1. 题目描述

在这里插入图片描述
在这里插入图片描述

2. 思考

在这里插入图片描述

  • 上面图片中,我们要找8,我们从左下角开始向右上角找,使用2个指针i ,j。
  • i = 4,j=0时,temp=18,其右边都>18,而 8 < 18,所以18右边的元素都可以排除,然后 i - - 。

在这里插入图片描述

  • i=3,j=0时,temp = 10,8 < 10,10右边排除,i - -;

在这里插入图片描述

  • i=2,j=0时,temp=3,3<8,3上方的都<3,所以排除,且3!=8,所以 j ++ 。

在这里插入图片描述

  • i=2,j=1,temp=6,6<8,6上方排除,j ++ 。

在这里插入图片描述

  • i=2,j=2,temp=9,9>8,右边排除,i - - 。

在这里插入图片描述

  • i = 1,j=2,temp=8,找到了数,直接返回true。

- 如果找到最后结束了,都没有找到,那就是没有这个数!


3. 此题思路

在这里插入图片描述

4. 代码

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {

        // 定义2个指针
        // i 指针从左下角开始
        int i = matrix.length -1;
        int j = 0;

        // i>=0 ,j 要小于列数
        while(i>=0 && j < matrix[0].length){
            // 当前值
            int temp = matrix[i][j];

            // target < temp
            if(target < temp){
                i--;
            }
            
            // target > temp
            else if(target > temp){
                j++;
            }
            
            // 不是大于,也不是小于,那就只能等了
            else{
                return true;
            }
        }

        // 循环结束还没找到就意味着没有这个数
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值