算法:

从右上角开始找,左边的都是比它小的,下边的都是比它大的。
如果当前元素等于target,那么说明找到了,返回true;
如果当前元素大于target,那么当前元素下面的一定都比target大,所以左移;
如果当前元素小于target,那么当前元素左面的一定都比target小,所以下移;
如果最后没返回true,则返回false。

时间复杂度:

O( m + n )  m为矩阵的行数,n为矩阵的列数

Code:

public boolean searchMatrix(int[][] matrix, int target) {
    int m = matrix.length;
    int n = matrix[0].length;
    int i = 0, j = n - 1;
    while (i < m && j >= 0) {
        if (matrix[i][j] == target) {
            return true;
        } else if (matrix[i][j] > target) {
            j--;
        } else {
            i++;
        }
    }
    return false;
}