您的位置:首页 > 其它

Largest Rectangle in Histogram (直方图中最大面积) 【leetcode】

2013-09-20 21:36 549 查看
题目:

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
.
题意找出最大面积的长方形。
之前做过类似的题,有O(n)复杂度的做法,用栈维护一个递增的序列,栈中存对应高度的位置。

每遍历一个元素,判断是否是栈中最大的元素,如果不是,把栈顶的元素弹出,并计算以栈顶元素为最大值高度时的长方形面积。

面积的长度为栈顶元素之前的一个元素到当前遍历的元素的之间的长度,边界情况特殊考虑。

class Solution {
public:
int largestRectangleArea(vector<int> &height) {
stack<int>s;
int len=height.size(),maxx=0;
for(int i=0;i<len;++i)
{
if(s.empty())s.push(i);
else
{
while(!s.empty()&&height[s.top()]>height[i])
{
int ph=s.top();
s.pop();
if(!s.empty())
maxx=max(maxx,(i-s.top()-1)*height[ph]);
else
maxx=max(maxx,i*height[ph]);
}
s.push(i);
}
}
while(!s.empty())
{
int ph=s.top();
s.pop();
if(!s.empty())
maxx=max(maxx,(len-s.top()-1)*height[ph]);
else
maxx=max(maxx,len*height[ph]);

}
return maxx;
}
};


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