从左下角开始,target大于当前值,往右走,否则往上走。相等代表找到。
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int x,y;
int rowNum,colNum;
if(array.size()==0) return false;
rowNum = array.size()-1; //行数
colNum = array[0].size()-1; //列数
x = rowNum;
y = 0;
while(x>=0&&x<=rowNum&&y>=0&&y<=colNum) {
//printf("(%d,%d)=%d\n",x,y,array[x][y]);
if(array[x][y]==target) {
return true;
}
if(array[x][y]<target) {
y++;
}
else {
x--;
}
}
return false;
}
};
/*you can test this class by main function
int main() {
vector<vector<int> > test;
vector<int>v;
int n,m,x; //n行m列。
while(~scanf("%d%d",&n,&m)) {
for(int i = 0; i < n; i++) {
v.clear();
for(int j = 0; j < m; j++) {
scanf("%d",&x);
v.push_back(x);
}
test.push_back(v);
}
Solution s;
int q;
scanf("%d",&q);
while(q--) {
scanf("%d",&x);
if(s.Find(x,test)) {
puts("True");
}
else {
puts("False");
}
}
}
return 0;
}
*/
/* test data:
4 5
1 2 5 7 8
3 5 6 17 18
5 10 13 18 19
8 11 14 20 59
20
*/