在二维数组中查找元素

呐,乍一听,很简单啊。一个一个遍历过去不就好了嘛。啊哈哈,我还没有把题目贴完,如题:

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

有什么关系吗?我还是可以一个一个遍历啊。哎,好吧,不得不承认这也能解决问题。但是我今天要推出的解决方案有两种,如下:
方案一:找到可能存在该元素的所有行,然后对其进行二分查找。
方案二:将视点从左上角移动到左下角,就会发现:Val(i,j) > Val(i-1,j) Val(i,j) < Val(i,j+1), 所以我们可以从左下角的元素开始和目标元素进行匹配。如目标元素大于视点元素,则视点右移。若目标元素小于视点元素,则视点上移。若目标元素等于视点元素,就找到了。如果到了行列边界还没有找到,则没有找到元素。

方案二叙述了一大堆,肯定是比方案一更好的啊,实现也简单不少。如果我的文字描述能力不足以让你看懂,那么下面的代码一定能够让你看懂。

bool Find(vector<vector<int> > array,int target) 
{
    int x = 0;                   //视点列号
    int y = array.size()-1;      //视点行号
    while(y >= 0 && x<array[y].size())
    {
        if(array[y][x] > target) --y;
        else if(array[y][x] < target) ++x;
        else return true;
    }
    return false;
}

还好吧,都应该能看懂哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值