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;
}
};