题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
有两种思路:
思路1:每一行进行二分查找,时间复杂度是O(nlogn)
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty())
return 0;
for(int i=0;i<array.size();i++){
int start=0;
int end=array[i].size()-1;
while(start<=end){
int mid=(start+end)/2;
if(array[i][mid]==target)
return 1;
else if(array[i][mid]>target)
--end;
else
++start;
}
}
return 0;
}
};
思路2:从右上角元素开始比较,如果taget元素大于此元素,去掉该行,若小于,去掉列,时间复杂度是O(n)
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty())
return 0;
int i=0;
int j=array[0].size()-1;
while(i<array.size()&&j>=0){
if(array[i][j]==target)
return 1;
else if(array[i][j]>target)
--j;
else
++i;
}
return 0;
}
};