题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
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,1492k
2.暴力迭代其实就是遍历搜索,由于整个举证是有序的,考虑折半的思想,但矩阵二维平面怎么折半?(思考一),(思考过程待整理补充)
时间复杂度: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