解法1,暴力法,直接遍历整个矩阵:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
for (auto ms:matrix) {
for (auto m:ms) {
if (m == target)
return true;
}
}
return false;
}
};
leedcode测试通过:
执行用时:20 ms, 在所有 C++ 提交中击败了80.71% 的用户
内存消耗:13.2 MB, 在所有 C++ 提交中击败了5.04% 的用户
通过测试用例:129 / 129
解法2,如果行查找,发现当前行的某一个元素大于target,则对该元素及后面所有列,都是大于target的,可以不用判断,且该行也不需要判断了。
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int n = matrix.size();
if (n == 0) return false;
int m = matrix[0].size();
for (int i = 0;i < n;++i) {
for (int j = 0;j < m;++j) {
if (matrix[i][j] > target) {
m = j;
break;
}
if (matrix[i][j] == target) {
return true;
}
}
}
return false;
}
};
leedcode测试通过:
执行用时:16 ms, 在所有 C++ 提交中击败了97.11% 的用户
内存消耗:12.7 MB, 在所有 C++ 提交中击败了68.29% 的用户