来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/0ynMMM
题目描述:
给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
我的代码:
使用单调栈:
1.设置一个栈保存数据的position,在最初放入-1(为了在后续计算宽度的时候做准备)
2.将高度设置为当前位置(i处)的矩阵的高度:
如果栈顶元素大于当前位置的元素值,说明栈顶元素的有边界找到了。
如果栈顶元素小于等于i处的元素值,直接压入栈。
3.最后输入一个元素0,把栈中的所有元素都计算到。
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
//单调栈
stack<int> st;
st.push(-1);
int maxArea=0;
for(int i=0;i<heights.size();i++){
while(st.top()!=-1 && heights[i]<heights[st.top()]){
int high=heights[st.top()];
st.pop();
maxArea = max(maxArea, (i-st.top()-1)*high);//求最大面积
}
st.push(i);
}
while(st.top()!=-1){//里面还有其他的元素
int high = heights[st.top()];
st.pop();
int width = heights.size()-st.top()-1;
maxArea = max(maxArea, high*width);
}
return maxArea;
}
};