74.搜索二维矩阵

2020-03-02  本文已影响0人  最尾一名

原题

https://leetcode-cn.com/problems/search-a-2d-matrix/

解题思路

二分查找的二阶形式。

分析题意,该 M*N 的矩阵是递增的。
我们首先找出 target 可能所在的行,再在该行进行二分查找。

代码

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
const searchRows = (matrix, target) => {
    let left = 0, right = matrix.length - 1;
    if (!matrix.length || !matrix[left].length) return left;
    while (left < right) {
        const mid = Math.floor((left + right) / 2);
        if (matrix[mid][0] === target) {
            return mid;
        }
        if (matrix[mid][0] > target) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return matrix[left][0] > target ? Math.max(left - 1, 0) : left;
}

const searchColumns = (matrix, rowIndex, target) => {
    if (!matrix.length || !matrix[rowIndex].length) {
        return false;
    }
    let left = 0, right = matrix[rowIndex].length - 1;
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        if (matrix[rowIndex][mid] === target) return true;
        if (matrix[rowIndex][mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return matrix[rowIndex][left] === target;
}

var searchMatrix = function(matrix, target) {
    return searchColumns(matrix, searchRows(matrix, target), target);
};

复杂度

上一篇下一篇

猜你喜欢

热点阅读