More information:
http://dp2.me/blog/?p=482
Thanks for your help. --> 无齿的兔子, 鹿杖客
#include <iostream>
#include <vector>
class Solution {
public:
int maximalRectangle(std::vector<std::vector<char> > &matrix) {
int n = matrix.size();
if(n==0) return 0;
int m = matrix[0].size();
if(m==0) return 0;
std::vector<int> height(m, 0);
std::vector<int> left(m, 0);
std::vector<int> right(m, 0);
int maxArea = 0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
height[j] = (matrix[i][j]=='1')? height[j]+1 : 0;
left[j] = j;
while(left[j]>0 && height[left[j]-1]>=height[j])
left[j] = left[left[j]-1];
}
for(int j=m-1; j>=0; j--)
{
right[j] = j;
while(right[j]<m-1 && height[j]<=height[right[j]+1])
right[j] = right[right[j]+1];
}
for(int j=0; j<m; j++)
maxArea = std::max(maxArea, (right[j]-left[j]+1)*height[j]);
}
return maxArea;
}
};
No comments:
Post a Comment