题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路一:遍历
/*
* 思路一:每一行都进行二分法查找
* 运行时间:0ms
* 占用内存:8552k
*/
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int top = 0, bottom = array.size();
int mid;
for(int i = 0; i < bottom; i++){
int left = 0, right = array[i].size()-1;
while(left <= right){
mid = (left+right)/2;
if(target > array[i][mid]){
left = mid+1;
}else if(target < array[i][mid]){
right = mid-1;
}else{
return true;
}
}
}
return false;
}
};
思路二:根据规律从左下角或者右上角开始查找
/*
* 思路二:从左下角开始查找
* 运行时间:10ms
* 占用内存:8552k
*/
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int top = 0, bottom = array.size()-1;
int left = 0, right = array[0].size()-1;
int xpos = left, ypos = bottom;
while((xpos <= right)&& (ypos >= top)){
if(target > array[xpos][ypos]){
//大于就往右走
xpos++;
}else if(target < array[xpos][ypos]){
//小于就往上走
ypos--;
}else{
return true;
}
}
return false;
}
};