您的位置:首页 > 其它

[LeetCode]Largest Rectangle in Histogram

2013-11-18 14:48 197 查看
Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.



Above is a histogram where width of each bar is 1, given height =
[2,1,5,6,2,3]
.



The largest rectangle is shown in the shaded area, which has area =
10
unit.

For example, Given height =
[2,1,5,6,2,3]
, return
10
.

思考:记录每个矩形最左最右比自己高的矩形下标,左右相减即为长,乘以矩形高,即为当前矩形可以组成矩形最大面积。求最大值。

struct Node{
int height;
int left;
int right;
int area;
};
class Solution {
public:
int largestRectangleArea(vector<int> &height) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.

int i;
int maxarea=0;
int len=height.size();
Node *h=new Node[len+2];
for(i=1;i<=len;i++)
{
h[i].height=height[i-1];
h[i].left=i;
h[i].right=i;
}

h[0].height=-1;
h[len+1].height=-1;
for(i=1;i<=len;i++)
{
while(h[i].height<=h[h[i].left-1].height)
h[i].left=h[h[i].left-1].left;
}

for(i=len;i>=1;i--)
{
while(h[i].height<=h[h[i].right+1].height)
h[i].right=h[h[i].right+1].right;
}
for(i=1;i<=len;i++)
{
h[i].area=h[i].height*(h[i].right-h[i].left+1);
if(maxarea<h[i].area)
maxarea=h[i].area;
}

delete []h;
return maxarea;
}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: