最大矩阵

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

 

/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalRectangle = function(matrix) {
        let max_length = 0;
    //横着的连续的1的个数
    for(let i =0;i<matrix.length;i++){
        for(let j=0;j<matrix[0].length;j++){
             k = 0;
             right = j;
             
             while(matrix[i][right]==="1"&&right<matrix[0].length){

                right ++;
                k++;
             }
             matrix[i][j] = k;
        }
    }

    //纵着的连续的个数
    for(let i=0;i<matrix.length;i++){
        for(let j=0;j<matrix[0].length;j++){
            //纵向
           if(matrix[i][j]!=0){
                let max =matrix[i][j];
                let right = i;
                //从当前位置开始找到不是1的位置
                while(right<matrix.length&&matrix[right][j]>=1) right++;
                right --;//使得right 执行了最后一个为1的字符
                while(right>i){
                    let min = Number.MAX_VALUE;
                    for(let k=i;k<=right;k++){
                        if(min>matrix[k][j]){
                            min = matrix[k][j];
                        }
                    }
                    if((right-i+1)*min>max){
                        max = (right-i+1)*min;
                    }   
                    right --;
                }
                matrix[i][j] = max;
                if(max>max_length){
                    max_length = max;
                }
           }
        }
    }

    return max_length;
};

实现:1.横向计算每个元素连续的1的个数

    2.纵向计算 每个元素元素最大的连续出现元素的个数

    3.纵向计算之后数组中的最大1的个数就是矩形的面积

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-rectangle

posted @ 2019-11-19 20:32  唐糖PJS  阅读(231)  评论(0编辑  收藏  举报