面试题3:二维数组中的查找

题目链接:http://ac.jobdu.com/problem.php?pid=1384

思路:每次将要查找的数字t与二维数组右上角的元素比较。

1、t比右上角的元素大,那么t肯定比该元素所在行的所有元素都大,直接删除该行,更新右上角元素。

2、t比右上角的元素小,那么t肯定比该元素所在列的所有元素都小,直接删除该列,更新右上角元素。

3、t等于右上角的元素,直接返回"Yes"。

code:

 1 #include <cstdio>

 2 using namespace std;

 3 const int MAXN = 1005;

 4 int A[MAXN][MAXN];

 5 bool inArray(int m, int n, int t)

 6 {

 7     int i = 0;

 8     int j = n - 1;

 9     while (i < m && j >= 0)

10     {

11         if (A[i][j] > t) --j;

12         else if (A[i][j] < t) ++i;

13         else return true;

14     }

15     return false;

16 }

17  

18 int main()

19 {

20     int m, n, t;    // m:行数 n:列数 t:待查找的数字

21     while (scanf("%d %d %d", &m, &n, &t) != EOF)

22     {

23         // 输入数据

24         for (int i = 0; i < m; ++i)

25         {

26             for (int j = 0; j < n; ++j)

27             {

28                 scanf("%d", &A[i][j]);

29             }

30         }

31         // 预判

32         if (t < A[0][0] || t > A[m - 1][n - 1])

33         {

35             puts("No");

36             continue;

37         }

38         if (inArray(m, n, t)) puts("Yes");

39         else puts("No");

40     }

41     return 0;

42 }

 

你可能感兴趣的:(二维数组)