题目
分析
遍历
- 每一个去对比
- 时间复杂度:O(M*N)
线性查找
- 时间复杂度:O(N)
- 从第一行最后一列开始比对
- 因为每一行和每一列都是递增的
- 最后一列的数一定比前面的列的数大
- 当这个数更小,一定再左边或者上边
- 这里用9做例子
-
-
先用15去做对比,15比9大,15所在的列被排除
-
再用11去和9比,比9大,11所在的列被排除
-
再用7和9去比,比9小,把7所在的行排除掉
-
用8去和9比,8比9小,把8所在的行排除掉
-
用9和9去对比,相等,返回
-
代码
线性查找
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size() <= 0)
{
return false;
}
for (int i = 0, j = matrix[0].size() - 1 ; j >= 0 && i < matrix.size();)
{
if (matrix[i][j] > target)
{
j--;
}
else if (matrix[i][j] == target)
{
return true;
}
else
{
i++;
}
}
return false;
}
};
遍历
for (auto i : matrix)
{
for (auto j : i)
{
if (j == target)
{
return true;
}
}
}
return false;