首页 > 代码库 > Maximal Rectangle
Maximal Rectangle
很不好想的一道题,参考:http://blog.csdn.net/doc_sgl/article/details/11832965
分为两步:把原矩阵转为直方图,再用largest rectangle求解:http://www.cnblogs.com/573177885qq/p/5537334.html
int largestRectangleArea(vector<int>& heights) {
stack<int> s;
heights.push_back(0);
int result=0;
for(int i=0;i<heights.size();)
{
if(s.empty()||heights[i]>heights[s.top()])
{
s.push(i++);
}
else
{
int tmp=s.top();
s.pop();
result=max(result,heights[tmp]*(s.empty()?i:i-s.top()-1));
}
}
return result;
}
int maximalRectangle(vector<vector<char>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
if(m==0 || n==0)return 0;
vector<vector<int>>dp(m,vector<int>(n,0));
for(int j=0;j<n;j++)
if(matrix[0][j]==‘1‘)dp[0][j]=1;
for(int j=0;j<n;j++)
{
for(int i=1;i<m;i++)
{
if(matrix[i][j]==‘1‘)dp[i][j]=dp[i-1][j]+1;
}
}
int max_area=0;
for(int i=0;i<m;i++)
max_area=max(max_area,largestRectangleArea(dp[i]));
return max_area;
}
Maximal Rectangle
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。