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