在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
本题目有两种思路:一种即为最简单的,暴力查找,对整个二维数组进行遍历查找,最坏的情况是遍历整个数组。
另外一种思路,则是根据题目要求,得到数组的排布规律,从左下角开始查找:如果比目标小,则右移动,反之,上移。
class Solution {
public:
bool Find1(int target, vector<vector<int> > array);
bool Find(int target,vector<vector<int>> array);
};
//这种方法是根据数组的规律,从左下角查询;如果比目标小,则右移动,反之,上移。
bool Solution::Find(int target, vector<vector<int> > array)//learning from internet
{
int hang = array.size();
int lie = array[0].size();
int i=hang-1;
int j=0;
while (i>=0 && j<lie)
{
if(array[i][j]==target)
return true;
if(array[i][j]>target)
i--;
else
j++;
}
return false;
}
//这种方法是低效率的,全部遍历,最坏的结果是遍历完整个数组
bool Solution::Find1(int target, vector<vector<int> > array)//my code
{
for (int i = 0; i < array.size();i++)
for (int j = 0; j < array[0].size();j++)
if (target == array[i][j])
return true;
return false;
}