原题
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
.
解:
int largestArea(vector<int> &height)
{
stack<int> s;
int res=0;
int max=0;
int topData;
int i;
for(i=0; i<height.size(); )
{
if(s.empty() || height[i]>=height[s.top()])//使用保持栈中的数据递增,否则计算出矩阵的大小
{
s.push(i++);
}
else
{
topData=s.top();
s.pop();
max=height[topData]*(s.empty()?i:i-s.top()-1);//只要s不为空,那么一定满足在(s.top,i)之间的数据都大于等于height[topData]
if(max>res)
res=max;
}
}
while(!s.empty())//别忘了考虑最后i到头的情况
{
topData=s.top();
s.pop();
max=height[topData]*(s.empty()? i : i-s.top()-1);
if(max>res)
res=max;
}
return res;
}