85. Maximal Rectangle

来源:互联网 发布:淘宝手机端优惠券设置 编辑:程序博客网 时间:2024/06/08 18:42

1、题目描述

输入一个由0和1组成的2D的矩阵,返回最大的由1组成的矩形面积。


2、思路

动态规划。

用v[i][j]记录在第j列,从第i行的元素起,往上数,有多少个连着的1.

现在用i行的这一小段1来形成正方形。

遍历第j列到第0列,实时更新最短的1竖列的长度xiao,同时更新最大面积。


3、代码

    int maximalRectangle(vector<vector<char>>& matrix) {        int n = matrix.size();        if(n==0) return 0;        int m = matrix[0].size();        int ans = 0;        vector<vector<int> > mm;        for(int i=0;i<n;i++){            vector<int>v;            for(int j=0;j<m;j++)                v.push_back(matrix[i][j]-'0');            mm.push_back(v);        }        for(int i=0;i<n;i++){            for(int j=0;j<m;j++){                if(mm[i][j]>0&&i>0)                    mm[i][j]+=mm[i-1][j];                int xiao = mm[i][j];                for(int k=j;k>=0;k--){                    xiao = min(xiao,mm[i][k]);                    ans = max(ans,xiao*(j-k+1));                }            }        }        return ans;    }



原创粉丝点击