#include <iostream>
#include <vector>
using namespace std;
class Solution{
public:
bool Find(int target, vector<vector<int>> array){
int nRow = array.size();//这里是array.size()函数,而不是sizeof()求占用内存大小
int nCol = array[0].size();
int i, j;
for(i = nRow - 1,j = 0; i >= 0 && j < nCol;){
if(array[i][j] == target)
return true;
if(array[i][j] > target){
i--;
continue;}
if(array[i][j] < target){
j++;
continue;}
}
return false;
}
};
int main()
{
vector<vector<int>> array = {{1, 2, 3}, {4, 5, 8}, {7, 8, 100}};
Solution sol;
bool b = sol.Find(3, array);
cout << b << endl;
return 0;
}
太大了,就往上;太小了,就往右。
太大了,说明该点所在右下角矩形都不对,放弃该行上行;太小了,则该点所在左上角矩形里的都太小而直接放弃,右行继续循环。
需要注意的是,该题目左往右递增,从上往下递增,但并不代表上面一行的数字一定比下面一行的小。