测试地址
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
可以考虑从二维数组的右上角或左下角查找,因为该二维数组的特点,每一行每一列,从左到右,从上到下,都是按照递增次序排的,所以要么是右面的数大,要么是下面的数大。如果右面的数大,就缩小左面的查找范围,如果上面的数大,就向下缩小查找范围,直到找到为止。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.size() == 0) return false;
bool flag = false;
int m = array.size();
int n = array[0].size();
int i=0,j=n-1;
while(i<m && j>=0)
{
if(array[i][j] == target)
{
flag = true;
break;
}
else if(array[i][j]>target) j--; //缩小左面查找范围
else i++; //缩小下面查找范围
}
return flag;
}
};