/*
程序逐行处理.先处理0行,最后处理m-1行
在处理第j行的时候
面积等于(right[i]-left[i])*height[i]
left[i]=max(left[i],cur_left)
right[i]=min(right[i],cur_right)
if(matrix[j][i]=="1")
height[i]+=1;
else
height[i]=0;
*/
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if(matrix.empty())
return 0;
int m=matrix.size();
int n=matrix[0].size();
vector<int> left(n,0);
vector<int> right(n,n);
vector<int> height(n,0);
int maxarea=0;
for(int i=0;i<m;i++)
{
int cur_left=0;
int cur_right=n;
for(int j=0;j<n;j++)
{
if(matrix[i][j]=='1')
{
height[j]++;
left[j]=max(left[j],cur_left);
}
else
{
height[j]=0;
left[j]=0;
cur_left=j+1;
}
if(matrix[i][n-1-j]=='1')
right[n-1-j]=min(right[n-1-j],cur_right);
else
{
cur_right=n-j-1;
right[n-1-j]=n;
}
}
for(int j=0;j<n;j++)
maxarea=max(maxarea,(right[j]-left[j])*height[j]);
}
return maxarea;
}
};
85. Maximal Rectangle
最新推荐文章于 2021-09-06 21:34:02 发布