84.柱状图中最大的矩形
与接雨水的题有相似之处,不过本题有以下区别:
1、计算面积的方式不同,接雨水是找填补空缺的面积,而求柱形面积是求过往最低高度所能囊括的面积;
2、判别条件不同,接雨水是需要在出现比栈顶元素大的元素时求累计面积,而求柱形面积是在出现更小高度矩形时求每一种矩形的面积并比较;
if(heights[i]>heights[st.top()]){
st.push(i);
}
else if(heights[i]==heights[st.top()]){
st.pop();
st.push(i);
}
else{
while(!st.empty()&&heights[i]<heights[st.top()]){
int mid=st.top();
st.pop();
if(!st.empty()){
int left=st.top();
int right=i;
int w=right-left-1;
int h=heights[mid];
result=max(result,w*h);
}
}
st.push(i);
}
此外,接雨水只有两个矩形就接不了了,而求柱形面积时也需要在数组的头部和尾部塞入0
heights.insert(heights.begin(),0);
heights.push_back(0);