思路(1)每一行有序,对每一行二分查找
bool Find(int target, vector<vector<int> > array) {
// 每一行有序
int row = array.size();
int col = array[0].size();
for(int i = 0;i<row;i++){
int low = 0;
int high = array[i].size()-1;
while(low<=high){
int mid = (high-low)/2+low;
if(array[i][mid] == target){
return true;
}
else if(array[i][mid]>target){
high = mid-1;
}
else if(array[i][mid]<target){
low = mid+1;
}
}
}
return false;
}
思路(2)从坐下角开始查找,target小先上,targrt大向右
bool Find(int target, vector<vector<int> > array) {
// 每一行有序
int row = array.size();
int col = array[0].size();
int up = row-1;
int right = 0;
while(up>=0 && right < col){
if(array[up][right] == target){
return true;
}
else if(array[up][right]>target){
up--;
}
else if(array[up][right]<target){
right++;
}
}
return false;
}