leetcode221.最大正方形

leetcode221.最大正方形

题目

在一个由 '0''1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

用例

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4
输入:matrix = [["0","1"],["1","0"]]
输出:1
输入:matrix = [["0"]]
输出:0

求解

/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalSquare = function(matrix) {
    let res = 0
    for(let i=0;i<matrix.length;i++){
        let heights=[]
        for(let j=0;j<matrix[0].length;j++){
            let height=0
            let tmp_i = i
            while(tmp_i>=0&&matrix[tmp_i][j]==1){
                height++
                tmp_i--
            }
            heights.push(height)
        }
        find_max(heights)
    }
    return res

    function find_max(heights){
        for(let i=0;i<heights.length;i++){
            //以第i个高度为起点所能形成的最大矩阵
            let min_height=heights[i]
            let width = 1
            let j=i
            while(j<heights.length&&width<=min_height){
                max_square = width*width
                if(max_square>res){
                    res=max_square
                }
                j++
                width++
                if(heights[j]<min_height){
                    min_height=heights[j]
                }
            }
        }
    }
};
posted @ 2021-12-06 14:17  BONiii  阅读(32)  评论(0)    收藏  举报