剑指Offer->二维数组中的查找

题目描述

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

思路

分析二位数组的结构,左上的最小、右下的最小。如果从左上开始查找,如在

[   1,  3,   6,   8, 11]

[   4,  5,   9, 14, 15]

[   7,  10, 12, 16, 17]

这样的二位数组中查找7,就会出现查找复杂的查找线路。

可以考虑从右上开始查找,因为在二维数组右上角的数字,有左边的数小于它、下面的数组大于它的特点。查找7的时候就有11、8、14、9、12、10、7这样的查找线路,简单明了。

 

代码

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

 

 

 

posted @ 2020-03-04 20:29  Farzin  阅读(66)  评论(0)    收藏  举报