Largest Rectangle in Histogram 一排矩形中的最大的面积
原创
©著作权归作者所有:来自51CTO博客作者我想有个名字的原创作品,请联系作者获取转载授权,否则将追究法律责任
Largest Rectangle in Histogram
Given n
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
For example,
Given height = [2,1,5,6,2,3]
,
return 10
.
class Solution {
public:
//思想很棒,栈内元素一定是要比当前i指向的元素小
//弹栈过程中面积的计算:h[t] * (stack.isEmpty() ? i : i - 1 - stack.peek() )
//1.h[t]是刚刚弹出的栈顶端元素,它肯定是短板,此时的面积计算是h[t]和前面的i-1开始所能围成的最大面积。
//2.栈内索引指向的元素都是比h[t]小的,如果h[t]是目前最小的,那么栈内就是空哦,则计算所有的。
//3.目前栈顶元素和h[t]之间(不包括h[t]和栈顶元素),都是大于他们两者的
//栈存储的是下标,末尾添加一个0,使元素都出栈
int largestRectangleArea(vector<int>& height) {
stack<int> ss;
int i=0,maxArea=0;
height.push_back(0);
int len=height.size();
while(i<len){
if(ss.empty() || height[ss.top()]<=height[i]){
ss.push(i++);
}else{
int t=ss.top();
ss.pop();
maxArea=max(maxArea,height[t] * (ss.empty()?i : i-1-ss.top()));
}
}
return maxArea;
}
};