国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > 二维数组中的查找

二维数组中的查找

来源:程序员人生   发布时间:2014-10-05 05:08:48 阅读次数:1795次
题目描述:

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

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。

输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。

接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

输出:

对应每个测试案例,

输出”Yes”代表在二维数组中找到了数字t。

输出”No”代表在二维数组中没有找到数字t。

样例输入:
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10
样例输出:
Yes
No
No
// // main.c // 二维数组中的查找 // // Created by 李亚坤 on 14-9-27. // Copyright (c) 2014年 李亚坤. All rights reserved. // #include <stdio.h> #include <stdlib.h> #define MAX 1000000 int find(int m, int n, int target,int a[]) { // 二分搞起了 int middle, left, right; left = 0; right = m * n; while (left < right) { middle = (left + right - 1) / 2; if (target > a[middle]) { left = middle + 1; } else if (target < a[middle]) { right = middle; } else return 0; } return -1; } int main(int argc, const char * argv[]) { int a[MAX]; int m, n; int i, j; int target; scanf("%d %d", &m, &n); scanf("%d", &target); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &a[i * m + j]); } } if (find(m, n, target, a) == 0) printf("Yes "); else printf("No "); return 0; }


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生