暴搜
题目链接:https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
直接暴力解法,遍历二维数组,找到等于target的返回true,没找到返回false,注意数组为空的情况
代码如下:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//数组为空的情况
if(matrix.empty() || matrix[0].empty()) return false;
int row = matrix.size(),col = matrix[0].size();
for(int i = 0; i < row;++i){
for(int j = 0; j < col; ++j){
if(matrix[i][j] == target) return true;
}
}
return false;
}
};
时间复杂度:O(NM)
空间复杂度:O(1)
优化
题目给的条件我们没有利用上,每一行从左到右是递增的,每一列从上到下也是递增的,都是有序的。
动图演示:
代码如下:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//数组为空的情况
if(matrix.empty() || matrix[0].empty()) return false;
int i = 0;
int j = matrix[0].size() - 1;
while(i < matrix.size() && j >= 0){
if(target == matrix[i][j]){
return true;
}else if(target < matrix[i][j]){
j--; //这一列全部排除
}else{
i++;//这一行全部排除
}
}
return false;
}
};
时间复杂度;O(n+m) n.m分别为行数和列数
空间复杂度:O(1)