21.搜索二维矩阵 II

48 阅读1分钟

题目链接

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

image.png

解法1 暴力解法

思路

按照暴力的思路就是每一行遍历呗...如果相等直接 return

(没想到暴力竟然ac了..笑哭hhh)

代码

function searchMatrix(matrix: number[][], target: number): boolean {
    for (let i of matrix) {
        for (let j of i) {
            if (j === target) {
                return true;
            }
        }
    }

    return false;
};

时空复杂度

时间复杂度:两层遍历,最差遍历n,虽有提前返回,但趋近于O(n^2)

空间复杂度:O(1),没有使用额外辅助空间

解法2 利用升序特性

矩阵是每行是从上往下升序。如果 matrix[i][j] 大于目标,那么 matrix[*][j] 都会大于目标。

所以最好从最后开始入手,从右往左,从上往下过滤。

代码

function searchMatrix(matrix: number[][], target: number): boolean {
    const m = matrix.length; // 不是正方形矩阵
    const n = matrix[0].length;
    let i = 0;
    let 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;
};

时空复杂度分析

时间复杂度:时间复杂度为 O(m + n)

空间复杂度:O(1),仅使用常数变量空间