剑指 Offer 04. 二维数组中的查找

思路:

  利用题目条件,从右上角看,矩阵是一个二叉搜索树,往左变小,往下变大。

  因此可以从右上角开始,如果当前位置元素比 target 大,则行 row++;

  如果当前位置元素比 target 小,则列 col--。

  这样可以把时间复杂度从暴力搜索的O(nm)降到O(n+m)

代码:

  时间复杂度O(m+n),空间复杂度O(1)

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if (matrix == null || matrix.length == 0)
            return false;
        int m = matrix.length, n = matrix[0].length;
        int row = 0, col = n-1;                     //从右上角开始
        while (row < m && col >=0) {
            if (matrix[row][col] < target)
                row++;                              //小则往下移
            else if (matrix[row][col] > target)
                col--;                              //大则往左移
            else
                return true;
        }
        return false;
    }
}

 

posted @ 2020-03-18 16:58  zjcfrancis  阅读(166)  评论(0编辑  收藏  举报