Typescript-Algorithms
    Preparing search index...

    Variable search_a_2_d_matrix_iiConst

    search_a_2_d_matrix_ii: (matrix: number[][], target: number) => boolean = searchMatrix

    240.搜索二维矩阵 II

    编写一个高效的算法,判断 m x n 矩阵中,是否存在一个目标值 target。该矩阵具有如下特性:

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

    示例1

    输入: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
    输出: true


    输入: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
    输出: false


    • m == matrix.length
    • n == matrix[i].length
    • 1 <= n, m <= 300
    • -10^9 <= matrix[i][j] <= 10^9
    • -10^9 <= target <= 10^9

    Type declaration

      • (matrix: number[][], target: number): boolean
      • Parameters

        • matrix: number[][]
        • target: number

        Returns boolean

    1. 从右上角开始找,这样子判断一个数要么比target大,要么比target小,要么就是target。
    2. 比target大,说明当前数所在列一定不可能了,因为这列最小的数都比target要大了,把这列消除掉
    3. 比target小,说明当前数所在行一定不可能了,因为这行最大的数都比target要小了,把这行消除掉

    重复上述过程,消除行、消除列。直到找到为止或者越界为止。

    function searchMatrix(matrix: number[][], target: number): boolean {
    const m = matrix.length;
    const n = matrix[0].length;

    let t = 0;
    let r = n - 1;

    while (t < m && r >= 0) {
    if (matrix[t][r] > target) {
    r--;
    }
    else if (matrix[t][r] < target) {
    t++;
    }
    else {
    return true;
    }
    }

    return false;
    };