85 Maximal Rectangle

求二維數(shù)組中最大的矩形

對(duì)每列的連續(xù)1進(jìn)行累加,問(wèn)題轉(zhuǎn)化為直方圖中求最大矩形,faster than 90%

/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalRectangle = function(matrix) {
    if(matrix.length === 0) return 0
    var h = matrix[0].map(item => item - '0')
    var max = subMax(h)
    for(var i = 1; i < matrix.length; i++){
        for(var j = 0; j < matrix[0].length; j++){
            if(matrix[i][j] === '1') h[j]++
            else h[j] = 0
        }
        max = Math.max(max, subMax(h))
    }
    return max
};
var subMax = function(h){
    var arr = h.concat([0])
    var stack = []
    var res = 0
    for(var i = 0; i < arr.length; i++){
        if(stack.length === 0 || arr[i] >= arr[stack[stack.length - 1]]){
            stack.push(i)
        }else{
            var index = stack[stack.length - 1]
            stack.pop()
            res = Math.max(res, arr[index] * (stack.length === 0 ? i : (i - stack[stack.length - 1] - 1)))
            i--
        }
    }
    return res
}
/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalRectangle = function(matrix) {
    if(matrix.length === 0) return 0
    var h = Array(matrix[0].length).fill(0)
    var max =0
    for(var i = 0; i < matrix.length; i++){
        for(var j = 0; j < matrix[0].length; j++){
            if(matrix[i][j] === '1') h[j]++
            else h[j] = 0
            var height = h[j]
            for(var k = j; k >= 0; k--){
                height = Math.min(height, h[k])
                var width = j - k + 1
                max = Math.max(max, height * width)
            }
        }
    }
    return max
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容