题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析:
例 二维数组
V(i,j) | 0列 | 1列 | 2列 |
0行 | 1 | 2 | 3 |
1行 | 2 | 3 | 4 |
2行 | 3 | 4 | 5 |
- 对于元素V(i,j)的左上角元素均 小于 V(i,j);
- 对于元素V(i,j)的右下角元素均 大于 V(i,j);
- 元素按 右、下 两个方向递增;
设要查询的整数为target,二维数组V(m,n)。选取右上角的数V(0,n-1)与target比较
步骤0:
初始值:i=0;j=n-1;result=false;
步骤1:
如果V(i,j)>target,则V(i,j)所在的第j列元素下边( 包含V(i,j) )均大于target,执行j--,执行步骤2;
步骤2:
如果V(i,j)<target,则V(i,j)所在的第i行元素左边( 包含V(i,j) )均小于target,执行i++,执行步骤3;
步骤3:
如果V(i,j)=target,则target存在于二维数组中,result=true,执行步骤4;
步骤4:
如果i>=m或者j<0, 则target不存在于二维数组中,result=false,执行步骤6;
否则执行步骤5;
步骤5:
执行步骤1;
步骤6:
输出结果result
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = (int )array.size();
int col = (int )array[0].size();
int i=0;
int j=col-1;
while (i < row && j >= 0)
{
if(array[i][j] < target )//array(i,j)所在的第i行左边元素均小于target
{
i++;
}
else if(array[i][j] > target )//array(i,j)所在的第j列下边元素均大于target
{
j--;
}
else //array(i,j)==target
{
return true;
}
}
return false;//array中不存在target
}
};