maximal-rectangle
2019-07-22 本文已影响0人
DaiMorph
class Solution {
public:
int maximalRectangle(vector<vector<char> > &matrix) {
int row=matrix.size(),col=matrix[0].size();
if(row==0||col==0)return 0;
int res=0;
vector<int>height(col,0);
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
height[j]=matrix[i][j]=='0'?0:(height[j]+1);
}
res=max(res,largestarea(height));
}
return res;
}
int largestarea(vector<int>height)
{
stack<int>st;
int res=0;
height.push_back(0);
for(int i=0;i<height.size();)
{
if(st.empty()||height[st.top()]<=height[i])st.push(i++);
else{
int temp=st.top();
st.pop();
res=max(res,height[temp]*(st.empty()?i:(i-st.top()-1)));
}
}
return res;
}
};