题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
方法:这里一定要注意有序这个概念,这整个数组的右下角,一定是数组最大的元素。选择从左下角开始进行搜索,如果target比这个元素大,就往右查找,如果target比这个元素小,就往上查找,这样可以只凭借与target的大小关系就唯一确定方向,如果从左上角开始找,那么向下与向右都是增大的方向,就不唯一方向,无法进行一个有效搜索。
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rowCount = array.size();
int colCount = array[0].size();
int i,j;
bool found=false;
i=rowCount-1;
j=0;
while(i>=0&&j<colCount){
if (array[i][j]==target){
found=true;
break;
}
else {if(array[i][j]<target){
j+=1;
continue;}
else{
i-=1;
continue;
}
}
}
return found;
}
};