题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都是递增排序。如果在这个数组中查找数字7,则返回true;如果数组中不含有该数字,则返回false。
算法思想:
由于二维数组有序,先选取最右上角数字array[row][column]与target比较
- 如果两者相等,则返回true,查找过程结束;
- 如果array[row][column]比target大就缩小一列(array[row][column]所在列)的寻找范围;
- 如果array[row][column]比target小就缩小一行(array[row][column]所在行)的寻找范围;
一直寻找下去直到遍历好整个数组,如果能找到目标数字,返回true,反之则返回false,代码是参考我在牛客网上写的,注意代码的鲁棒性,输入array为空情况的返回要false。
代码:
public:
bool Find(int target, vector<vector<int> > array) {
bool find=false;
int i=7;
int rows=array.size();
int columns=array[0].size();
if((rows>0)&&(columns>0))
{
int row=0;
int column=columns-1;
while((row<rows)&&(column>=0))
{
if(array[row][column]==target)
{
find=true;
break;
}
else if(array[row][column]>target)
{
column--;
}
else
{
row++;
}
}
}
return find;
}
};
也可以尝试选取最左上角的数字与target比较,原理一样,这里不再赘述。