题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:
因为从左往右和从上到下都是递增的,所以可以选择右上角的那个元素为基准,然后判断大小,对坐标进行改变。
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array)
{
int i,j;
int row = array.size();
int col = array[0].size();
int row_index = 0;
int col_index = col-1;
bool ok = true;
while(ok)
{
if(row_index>=row||col_index<0)
{
ok = false;
break;
}
if(array[row_index][col_index]<target) row_index++;
else if(array[row_index][col_index]>target) col_index--;
else break;
}
return ok;
}
};
或者
class Solution {
public:
bool Find(int target, vector<vector<int> > array)
{
int i,j;
int row=array.size();
int col=array[0].size();
for(i=0,j=col-1;i<row&&j>=0;){
if(array[i][j]>target) j--;
else if(array[i][j]<target) i++;
else return true;
}
return false;
}
};