您的位置:首页 > 其它

二维数组中的查找

2016-02-16 15:52 351 查看

题目

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



当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍规律。针对这个问题,我们不妨也从题目给出的例子入手。

首先我们选取右上角的数字9。由于9大于7,并且9还是第四列中最小的数字,因此7不可能出现在第四列。于是,我们把这一列从需要考虑的区域内剔除。在剩下的矩阵中,位于右上角的数字是8。同样8大于7,因此8所在的列我们也可以剔除。

在剩余的两列中, 2位于右上角,2小于7,那么要查找的7只可能在2的下边。于是我们把2所在的行也剔除。在剩下的矩阵中,4位于右上角,和前面一样,我们把数字4所在的行也剔除。

在剩下的2*2矩阵中,位于右上角的恰好就是我们要查找的数字7,于是查找过程就可以结束了。



总结上述查找过程,可以发现:首先选取数组右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除该数字所在的列;如果该数字小于要查找的数字,则剔除该数字所在的行。直到找到要查找的数字,或者要查找的范围为空。

bool Find(vector<vector<int> > array, int target) {
bool found = false;
if (!array.empty())
{
int rows = array.size();
int cols = array[0].size();
if (rows > 0 && cols > 0)
{
int row = 0;
int col = cols - 1;
while (row < rows && col >= 0)
{
if (array[row][col] == target)
{
found = true;
break;
}
else if (array[row][col] > target)
--col;
else
++row;

}
}

}
return found;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: