//这个应该是平均时间复杂度O(m+n)的吧?
class Solution {
public:bool Find(int target, vector<vector<int> > array) {
int m=array.size();//行数
int n=array[0].size();//列数
if(m==0||n==0)return false;
int linemax=m-1;
for(int i=0;i<m;i++){
if(target<array[i][0]){
if(i==0)return false;
else{
linemax=i-1;//找到target可能在的最大行数
break;
}
}
else if(target==array[i][0]) return true;
}
int linemin=0;
for(int i=0;i<m;i++){
if(array[i][n-1]>target){
linemin=i;//找到target可能在的最小行数
break;
}
else if(target==array[i][n-1]) return true;
}
for(int i=linemin;i<=linemax;i++){
for(int j=0;j<n;j++){
if(array[i][j]==target)return true;
}
}
return false;
}
};