84.柱状图中最大的矩形
思路一:单调栈
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
heights.insert(heights.begin(),0);//头加0,防止刚开始
heights.push_back(0);//尾巴上加0,防止一直递增最后丢失数据
int n=heights.size();
stack<int>st;
st.push(0);
int res=0;
for(int i=1;i<n;i++){
while(heights[i]<heights[st.top()]){
int mid=st.top();//找到右边第一个比自己小的数
st.pop();
int w=i-st.top()-1;
int h=heights[mid];
res=max(res,w*h);
}
st.push(i);
}
return res;
}
};