搜索二维矩阵

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

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
const searchMatrix = (matrix, target) => {
    let mayBeInArray = []
    let outerStartIdx = 0, outerEndIdx = matrix.length - 1;
    while(outerStartIdx <= outerEndIdx){
        if(outerStartIdx === outerEndIdx){
            mayBeInArray = matrix[outerStartIdx]
            break
        }
        let  outerMidIdx = Math.floor((outerStartIdx + outerEndIdx) / 2)
        if(matrix[outerMidIdx][0] > target){
            outerEndIdx = --outerMidIdx
        }else if(matrix[outerMidIdx][matrix[outerMidIdx].length - 1] < target){
            outerStartIdx = ++outerMidIdx
        }else{
            mayBeInArray = matrix[outerMidIdx]
            break
        }
    }
    let innerStartIdx = 0, innerEndIdx = mayBeInArray.length - 1;
    while(innerStartIdx <= innerEndIdx){
        let  innerMidIdx = Math.floor((innerStartIdx + innerEndIdx) / 2)
        if(mayBeInArray[innerMidIdx] > target){
            innerEndIdx = --innerMidIdx
        }else if(mayBeInArray[innerMidIdx] < target){
            innerStartIdx = ++innerMidIdx 
        }else{
            return true 
        }
    }
    return false
};

  

posted @ 2023-02-04 15:13  671_MrSix  阅读(12)  评论(0编辑  收藏  举报