解题思路:
(1)每一行单调栈
class Solution {
public:
int helper(vector<int>& h) {
int n=h.size();
vector<int> left(n),right(n,n);
stack<int> s;
for(int i=0;i<n;i++) {
while(!s.empty() && h[s.top()]>=h[i]) {
right[s.top()]=i;
s.pop();
}
left[i]=s.empty()?-1:s.top();
s.push(i);
}
int maxsum=0;
for(int i=0;i<n;i++) {
maxsum=max(maxsum,(right[i]-left[i]-1)*h[i]);
}
return maxsum;
}
int maximalRectangle(vector<vector<char>>& matrix) {
int m=matrix.size();
if(m==0) return 0;
int n=matrix[0].size();
int maxsum=0;
vector<int> v(n,0);
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(matrix[i][j]=='0') v[j]=0;
else v[j]++;
}
maxsum=max(maxsum,helper(v));
}
return maxsum;
}
};