240.搜索二维矩阵2

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var searchMatrix = function (matrix, target) {

    let row = 0
    let col = 0

    let len = matrix.length
    while (row < n && col < n) {
        let val = matrix[row][col]
        if (target === val) {
            return true
        } else if (target > matrix[row][col]) {
            if (col < n) { // 往右找
                col++
            } else { // 往下找
                row++
            }
        } else {

        }
    }
};

var searchMatrix = function (matrix, target) {
    let m = matrix.length
    let n = matrix[0].length
    for (let i = 0; i < m; i++) {
        // 每行的元素从左到右升序排列。
        // 每列的元素从上到下升序排列。
        // 根据上面的条件,可以得到一些边界条件
        if (target < matrix[i][0]) { // 不存在
            return false
        }
        if (target > matrix[i][n - 1]) { // 比最后一个数大,直接跳过
            continue
        }

        // 二分查找
        let left = 0
        let right = n - 1
        while (left <= right) {
            let mid = Math.floor((left + right) / 2)
            let num = matrix[i][mid]
            if (num === target) {
                return true
            } else if (num > target) {
                right = mid - 1
            } else if (num < target) {
                left = mid + 1
            }
        }
    }

    return false
}

let m = [[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]]
console.log(searchMatrix(m, 5))