[九度剑指offer] 1384

来源:互联网 发布:淘宝上传图片大小限制 编辑:程序博客网 时间:2024/06/06 21:06

题目链接

题目给出了一个二维数组,行从上到下递增,列从左到右递增。

给出一个目标数,来查找该目标数是否存在于这个二维数组中。

很直接的想法就是由两个二分查找来组成,但是这样的想法会存在明显的问题

1 3

2 4

对于这样的2*2的数组,查找3这个元素,如果先对第一列元素进行二分查找,很明显就找不到3这个元素了。

这里给出一个简单的算法。

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int arr[1005][1005];int m,n,t;bool bFind(int x,int y){if(x > m || y < 1)return false;while(x <= m && y >= 1){if(arr[x][y] == t)return true;else if(arr[x][y] > t)--y;else if(arr[x][y] < t)++x;}return false;}int main(){int i,j;while(scanf("%d%d",&m,&n)!=EOF){scanf("%d",&t);memset(arr,0,sizeof(arr));for(i = 1;i <= m ;i++)for(j = 1;j <= n;j++)scanf("%d",&arr[i][j]);if(bFind(1,n))cout<<"Yes"<<endl;elsecout<<"No"<<endl;}}


原创粉丝点击