class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if (array.size() == 0) {
return false;
}
int rows = array.size();
int cols = array[0].size();
int j = cols - 1;
int i = 0;
while(i < rows && j >= 0) {
if(array[i][j] < target) {
++i;
}
else if(array[i][j] > target) {
--j;
}
else{
return true;
}
}
return false;
}
};
这题思路很简单,我们先看一下题目:
重点就是每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。我们的思路可以是这样开始的:
true
这样是可以的,但是当二维数组非常大的时候耗费的时间就会很大(时间复杂度大概在n^2
,前提是二维数组近似方形且目标较靠后),不一定能够满足题目的要求,所以我们要根据上面画的重点来进行优化:
false
)总结一下,我们需要做的事情就是:
false