【剑指offer】二维数组中判断是否含有一个整数

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

解题思路:根据二维数组array[][]的特性,行和列均是递增排序,在查找数组中是否含有这个整数target时,可以按照行和列去查找。

1 2 3
4 5 6
7 8 9

则二维数组的行和列分别为:

行数:int row = (int)array.size();

列数:int col = (int)array[0].size();

比较规则:我们选取数组右上角的数去和该整数target比较:

1.如果array[i][j]>target,则寻找更小的数比较,即j--;

2.如果array[i][j]<target,则寻找更大的数,即i++;

【注】:比较前可以判断数组是否为空,查找整数是否在数组中。

 1 class Solution{
 2 public:
 3     bool Find (int target, vector<vector<int>> array)
 4     {
 5         int row = (int)array.size();
 6         int col = (int)array[0].size();
 7         if (row == 0|| col == 0)
 8             return false;
 9         if (target <array[0][0]||target >array[row-1][col-1])
10             return false;
11         int i=0;
12         int j=col-1;
13         while(i<row && j>=0)
14         {
15             if (array[i][j]>target)
16             {
17                 j--;
18             }
19             if (array[i][j]<target)
20             {
21                 i++;
22             }
23             else
24             {
25                 return 1;
26             }
27         }
28         return 0;
29     }
30 };

 

posted @ 2019-05-24 21:28  xdak  阅读(386)  评论(0编辑  收藏  举报