一、题目
二、代码
- 解法一
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int i=0,j=0;
//从第一行第一列开始,按行遍历向量容器
while(i<matrix.size() && j<matrix[0].size())
{
//若找到目标值,返回true
if(matrix[i][j] == target)
{
return true;
}
//若该行值未超过目标值,并且该行未遍历完毕
if(matrix[i][j]<target && (j+1)<matrix[0].size() && matrix[i][j+1]<=target)
{
j++;
}
//在该行未找到目标值,若存在下一行,则开始遍历下一行
else if((i+1)<matrix.size() && matrix[i+1][0]<=target)
{
j=0;
i++;
}
//若遍历完仍未找到目标值,跳出循环返回false
else
{
break;
}
}
return false;
}
};
- 解法二
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int i = matrix.size() - 1, j = 0;
//从第一列最后一行开始遍历向量容器
while(i >= 0 && j < matrix[0].size())
{
//若值大于目标值,则往上一行寻找
if(matrix[i][j] > target) i--;
//若值小于目标值,则往左一列寻找
else if(matrix[i][j] < target) j++;
//若找到目标值,返回true
else return true;
}
//若找不到目标值,返回false
return false;
}
};