解法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% 的用户
