~二维数组中的查找~

来源:互联网 发布:win10优化版 编辑:程序博客网 时间:2024/05/17 21:43

问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

                  请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

 

问题分析:

1.我们可以先假设一个简单的二维数组及整数(如下图),以此为例来找到解决问题的思路。

 

2.乍一看问题,可能会觉得很简单,因为一个双重for()循环就可以轻易的得到答案,可惜的是时间复杂度是O(N^2),所以这一思路会很自然的被系统自动舍弃,还是开动开动脑筋吧!

  由问题描述可知,数组的排列规则为:每一行(row)都按照从左到右递增的顺序排序,每一列(col)都按照从上到下递增的顺序排序。那么我们是不是可以试一下用最左下角的数字开始比较呢?或许可以试试!

  由数组知最左下角的数字为7,用7与整数3做比较自然是7比较大。由规则得7所在的行每一个数字都比整数3大,而7所在的列每一个数字都可能比整数3小,所以应将行减1(即--row)后再与整数3进行判断。由于4大于整数3,故应再将行减1,让1与整数3做比较。用1与整数3做比较自然是整数3比较大。由规则得1所在的行每一个数字都可能比整数3大,所以应将列减1(即--col)后再与整数3进行判断。按照上述逻辑即可判断出数组中含有该整数。

 

源代码如下:

    bool Find(int target, vector<vector<int> > array) {        int row=array.size();  //行        int col=array[0].size();  //列                int i=row - 1;        int j=0;                while(i>=0 && j<=col-1)        {            if(array[i][j] > target)            {                --i;            }            else if(array[i][j] < target)            {                ++j;            }            else            {                return true;            }        }                return false;     }


 

0 0