leetcode:Largest Rectangle in Histogram

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.

题目如上,文中摘了其他博客的图,原博客为 http://www.cnblogs.com/lichen782/p/leetcode_Largest_Rectangle_in_Histogram.html#2973562

class Solution {
public:
int largestRectangleArea(vector<int> &height) {
stack<int> s;
height.push_back(0);
int result = 0;
for (int i = 0; i < height.size(); ) {
if (s.empty() || height[i] > height[s.top()])
s.push(i++);
else {
int tmp = s.top();
s.pop();
result = max(result,
height[tmp] * (s.empty() ? i : i - s.top() - 1));
}
}

return result;

}

};


1、height.push_back(0):加入一个高度0不会影响到最大面积的结果,同时把最后的高度考虑进while循环中。

2、if(s.empty() || height[i] > height[s.top()]):当栈为空或递增时,入栈。else:当前位置高度   小于   栈顶位置的高度,出栈,求面积(此位置以前的最大面积)。

3、height[tmp] * (s.empty() ? i : i - s.top() - 1)):高度:栈顶位置的高度,因为从栈顶到当前位置必定栈顶高度为最低高度(若有更低高度已经提前出栈),宽度:若栈为空,则到向量的头部即宽度为i,若不为空,则到栈顶的位置即i-1 - s.top()。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值