剑指offer-二维数组的查找

本文介绍了一种在递增排序的二维数组中查找特定整数的高效算法。通过对比数组最右上角元素与目标值,逐步缩小搜索范围,直至找到目标或遍历完整个数组。

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

题目描述

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

例如下面的二维数组就是每行、每列都是递增排序。如果在这个数组中查找数字7,则返回true;如果数组中不含有该数字,则返回false。
二维数组

算法思想:

由于二维数组有序,先选取最右上角数字array[row][column]与target比较

  1. 如果两者相等,则返回true,查找过程结束;
  2. 如果array[row][column]比target大就缩小一列(array[row][column]所在列)的寻找范围;
  3. 如果array[row][column]比target小就缩小一行(array[row][column]所在行)的寻找范围;

一直寻找下去直到遍历好整个数组,如果能找到目标数字,返回true,反之则返回false,代码是参考我在牛客网上写的,注意代码的鲁棒性,输入array为空情况的返回要false

代码:

public:
    bool Find(int target, vector<vector<int> > array) {
     bool find=false;
        int i=7;
        int rows=array.size();
        int columns=array[0].size();
       
        if((rows>0)&&(columns>0))
        {
            int row=0;
            int column=columns-1;
            while((row<rows)&&(column>=0))
            {
                if(array[row][column]==target)
                {
                    find=true;
                break;
                }
                else if(array[row][column]>target)
                {
                    column--;
                }
                else
                {
                    row++;
                }
                
            }
        }
        return find;
    }
};

也可以尝试选取最左上角的数字与target比较,原理一样,这里不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值