第一种暴力,根据左神的代码敲的,
二维数组每一行每一列都是按照一定的顺序排序的,所以我们可以根据这一点从右上角开始遍历,如果当前元素小于目标整数,则目标元素可能在该列下面,大于目标整数,则目标元素可能在该行左列。
从右上角开始遍历,但还是存在一个问题。需要判断矩阵是否为空。

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.empty())return false;
        int row=0,col=matrix[0].size()-1;
        while(row < matrix.size() && col>=0)
        {
            if(matrix[row][col]>target)
            {
                col--;
            }
            else if(matrix[row][col]<target)
            {
                row++;
            }
            else
               return true;
        }
        return false;
    }
};

问过很多人,如果矩阵为空,右上角matrix(0)则越界,第一维可以访问,第二维却不可以访问。

第二种从左下角开始遍历

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        int i = matrix.size() - 1, j = 0;
        while(i >= 0 && j < matrix[0].size())
        {
            if(matrix[i][j] > target) i--;
            else if(matrix[i][j] < target) j++;
            else return true;
        }
        return false;
    }
};

左下角的可以不需要判断是否为空因为不会涉及超限的问题。

越努力,越幸运。