问题:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rows = array.size();
int cols = array[0].size();
// 获取左下角索引
int i = rows - 1;
int j = 0;
//
bool m_bFind = false;
while( ((i < rows)&&(i>=0) ) && j < cols )
{
if( array[i][j] > target ) // 先对第j列查找, 行的顺序是由下到上,数值由大变小
{
i = i - 1; //
}
else if( array[i][j] < target ) // 再对第i行查找,从左到右,数值由小到大
{
j = j + 1;
}
else if (array[i][j] == target)
{
m_bFind = true;
return m_bFind;
}
}
return false;
}
};
这里假定输入的array就是一个二维数组,但是如果使用vector<vertor<int>> array的成员函数:push_back,则最后变成一个类似于倒三角阵的东西,也就是说array[0]的size为1(有1个vector<int>成员),array[1]的size为2(有2个vector<int>成员);
push_back了n次就会有n行,每行的size为:n-1。用push_back的话,array[0][1]或者是array[0][2]都是没有值的。