解法1,暴力法,直接遍历整个矩阵:

    1. class Solution {
    2. public:
    3. bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
    4. for (auto ms:matrix) {
    5. for (auto m:ms) {
    6. if (m == target)
    7. return true;
    8. }
    9. }
    10. return false;
    11. }
    12. };

    leedcode测试通过:

    1. 执行用时:20 ms, 在所有 C++ 提交中击败了80.71% 的用户
    2. 内存消耗:13.2 MB, 在所有 C++ 提交中击败了5.04% 的用户
    3. 通过测试用例:129 / 129

    解法2,如果行查找,发现当前行的某一个元素大于target,则对该元素及后面所有列,都是大于target的,可以不用判断,且该行也不需要判断了。

    1. class Solution {
    2. public:
    3. bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
    4. int n = matrix.size();
    5. if (n == 0) return false;
    6. int m = matrix[0].size();
    7. for (int i = 0;i < n;++i) {
    8. for (int j = 0;j < m;++j) {
    9. if (matrix[i][j] > target) {
    10. m = j;
    11. break;
    12. }
    13. if (matrix[i][j] == target) {
    14. return true;
    15. }
    16. }
    17. }
    18. return false;
    19. }
    20. };

    leedcode测试通过:

    1. 执行用时:16 ms, 在所有 C++ 提交中击败了97.11% 的用户
    2. 内存消耗:12.7 MB, 在所有 C++ 提交中击败了68.29% 的用户