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;
}