题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
#include<iostream>
#include<vector>
using namespace std;
void initarray(vector<vector<int> >& array)
{
int num;
array.resize(4);
for (int i = 0; i< array.size(); i++){
for (int j = 0; j < 4; j++)
{
cin>>num;
if (i>0&&j>0&&num>array[i][j]-1&&num>array[i-1][j])
{
array[i].push_back(num);
}
else if (i==0&&j==0)
{
array[i].push_back(num);
}
else if (i==0&&j!=0&&num>array[i][j-1])
{
array[i].push_back(num);
}
else if (j==0&&num>array[i-1][j])
{
array[i].push_back(num);
}
else
{
cout<<"error,不符合规则"<<endl;
j--;
continue;
}
}
}
}
class Solution{
public:
bool find(int target,vector<vector<int> >&array){
if (array.size()==0)
{
return false;
}
for(int i=array.size()-1,j=0;i>=0&& j < array[0].size();){
if(target<array[i][j])
i--;
else if (target>array[i][j])
j++;
else
return true;
}
return false;
};
};
int main()
{
vector<vector<int>> a;
Solution P;
initarray(a);
if(P.find(20,a))
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
return 0;
}
注意:要用函数改变二维数组,需要使用引用传递或指针传递传递参数。例如
void init_vector(vector <int> &obj) //引用传递,共享同一个内存空间