题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
#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) //引用传递,共享同一个内存空间