牛客网刷题—剑指OFFER 001 二维数组查找

1.题目说明  

一个二维数组,每一行从左到右都是递增,每一列从上到下也是递增,完成一个函数,找出该二维数组中是否包含某个指定的数。

2.思路

1)输入 : 二维数组   array 某个整型数  target

2)输出:True -有  False-没有

3)算法:因为该二维数组遵循一定的规律,可以从“极端”数据入手,比如右上角和左下角这两个数。

       右上角数的特点,本行最大却本列最小,若要查找的数target比它大,那么肯定他们不是在同一行的,这一行就可以剔除。

       反之,则他们肯定不是同一列的,这一例就可以剔除,缩小了查找范围。

       同理,左下角的数本行最小却本列最大,若target比它小,则不在同一行,反之则不在同一列

       这样每次查找都可以剔除掉一行或者一列,降低了复杂度。

3.代码实现(以左下角开始查找为例)

class Solution 
{ 
   public :
   bool Find(vector<vector<int>> array , int target)
{
    if (array.empty()) 
    return false;
    int rows=array.size();
    int clos=array[0].size();
    int i=rows-1;
    int j=0;
    while(i>=0 && j<clos)
     {
      
      if (a[i][j]==target) 
      return true;
      if (a[i][j]>target) // 我最小都比你大 肯定不在同一行 剔除这一行
         i--;
      else   
         j++;   
     }

  return false;
 
}

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值