题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
1.暴力迭代
时间赋值度:O(nm),空间复杂度:O(nm)
using namespace std;
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
for(vector<vector<int>>::iterator col = array.begin();col!=array.end();++col){
for(vector<int>:: iterator row = (*col).begin();row != (*col).end();++row){
if(*row == target){
return true;
}
}
}
return false;
}
};//10ms,1492k2.暴力迭代其实就是遍历搜索,由于整个举证是有序的,考虑折半的思想,但矩阵二维平面怎么折半?(思考一),(思考过程待整理补充)
时间复杂度:O(m+n),空间复杂度:O(n*m)
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = 0;
int col = array.size() - 1;
while(row < array[0].size() && col >= 0 && array[col][row] != target){
while(row < array[0].size() && col >= 0 && array[col][row] < target){
cout<<array[col][row]<<endl;
++row;
}
while(row < array[0].size() && col >= 0 && array[col][row] > target){
cout<<array[col][row]<<endl;
--col;
}
}
cout<<col<<" "<<row<<endl;
if(col < 0 || row == array[0].size()){
return false;
}
else{
return true;
}
}
};///9ms,1380k
京公网安备 11010502036488号