您的位置:首页 > 其它

leetcode 最大矩形和

2014-07-12 16:01 381 查看
1.枚举法(超时)

class node
{
int d; //di
int h;// higtht
}

public class Solution {
public int largest(int[] height) {
int len=height.length;
if(len==0) return 0;
node n[]=new node[len];
for(int i=0;i<len;i++)
{
n[i]=new node();
n[i].d=1;
n[i].h=height[i];

}
Stack<node> s=new Stack<node>();
s.push(n[0]);
int max=n[0].h;
for(int j=1;j<len;j++)
{
node t=s.peek();
if(n[j].h>=t.h)
{
s.push(n[j]);
}
else
{
int with=0;
while(!s.isEmpty()&&s.peek().h>n[j].h)
{
t=s.pop();
with+=t.d;
if(with*t.h>max) max=with*t.h;

}
n[j].d+=with;
s.push(n[j]);

}

}
int with=0;
while(!s.isEmpty())
{
node t=s.pop();
with=with+t.d;
int temp=t.h*with;

if(temp>max) max=temp;

}

return max;
}
public int maximalRectangle(char[][] matrix) {
if(matrix.length==0) return 0;

int len=matrix[0].length;
int ans[]=new int[len];
for(int i=0;i<len;i++)
{
ans[i]=matrix[0][i]-'0';
}
int max=largest(ans);

for(int i=1;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]=='0') ans[j]=0;

else
{
ans[j]+=1;
}

}

int t=largest(ans);
if(max<t) max=t;

}

return max;

}
}


View Code
https://oj.leetcode.com/problems/maximal-rectangle/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: