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.
![](http://www.leetcode.com/wp-content/uploads/2012/04/histogram.png)
[2,1,5,6,2,3]
.![](http://www.leetcode.com/wp-content/uploads/2012/04/histogram_area.png)
The largest rectangle is shown in the shaded area, which has area =
10
unit.For example,
Given height =
return
Given height =
[2,1,5,6,2,3]
,return
10
.![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int largestRectangleArea(vector<int> &height) { int maxarea = 0, index = 0, n = height.size(); stack<int> s; while(index < n){ if(s.empty() || height[s.top()] <= height[index]) s.push(index++); else{ int topIndex = s.top();s.pop(); int topOfArea = height[topIndex]*(s.empty() ? index : index-s.top()-1); maxarea = max(topOfArea,maxarea); } } while(!s.empty()){ int topIndex = s.top();s.pop(); int topOfArea = height[topIndex]*(s.empty() ? index : index-s.top()-1); maxarea = max(topOfArea,maxarea); } return maxarea; }
关于本题的一点自己的想法
将直方图的最高点连起来就会形成如下图类似的有波谷的曲线![](//images0.cnblogs.com/i/448560/201406/270020048366401.png)
![](http://images0.cnblogs.com/i/448560/201406/270020048366401.png)
两个波谷之间就是一个局部的凸起的形状(局部直方图构成)
不同凸起之间会有各自的最大直方图面积,相互之间不会影响(底部波谷与波谷除外),
求出每个凸起的面积,取最大值
然后底部波谷之间连线又会构成曲线,求出凸起的面积
直到最后没有凸起,
所求的最大面积即位直方图面积