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;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读