链接:LeetCode 85. Maximal Rectangle
这一题要用到直方图最大矩阵作为一个中间结果。
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
vector<int> tmp;
int len=matrix.size();
if(len==0) return 0;
int maxSize=0;
for(int i=0;i<matrix[0].size();++i){
tmp.push_back(0);
}
for(int i=0;i<len;++i){
for(int j=0;j<matrix[0].size();++j){
if(matrix[i][j]=='0'){
tmp[j]=0;
}else{
tmp[j]+=1;
}
}
maxSize=max(maxSize,largestRectangleArea(tmp));
}
return maxSize;
}
int largestRectangleArea(vector<int> &heights){
heights.push_back(0);
int len=heights.size();
int maxVal=0;
stack<int> s;
for(int i=0;i<len;++i){
while(!s.empty()&&heights[i]<=heights[s.top()]){
int cur=s.top();
s.pop();
maxVal=max(maxVal,heights[cur]*(s.empty()?i:(i-s.top()-1)));
}
s.push(i);
}
return maxVal;
}
};