LeetCode 85.最大矩形

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6
算法:单调栈。此题与84题几乎完全一样,我们只需要维护一个单调栈,将矩阵的列中最长的边找出来即可。

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int n=matrix.size(), m, ans=0;
        if (n==0)
            return 0;
        m=matrix[0].size();
        vector<int>heights(m+1,0);
        heights[m]=-1;
        for (int i=0; i<n; i++) {
            for (int j=0; j<m; j++)
                if (matrix[i][j] == '0')
                    heights[j]=0;
                else
                    heights[j]++;

            stack<int>st;
            for (int j=0; j<=m; j++) {
                while (!st.empty()&&heights[j]<heights[st.top()]) {
                    int cur=st.top();
                    st.pop();
                    if (st.empty())
                        ans=max(ans, heights[cur]*j);
                    else
                        ans=max(ans, heights[cur]*(j-st.top()-1));
                }
                st.push(j);
            }
        }
        return ans;
    }
};

 

posted @ 2019-07-08 19:44  YF-1994  阅读(229)  评论(0编辑  收藏  举报