last dance
柱状图中最大的矩形
leetcode:84. 柱状图中最大的矩形
单调栈
思路
和接雨水很类似,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)
注意点
- 尾加0后还是要遍历到
heights.size()-1
,因为是以取出元素为基准计算的,而取出元素是当前遍历元素的上一个。
代码实现
class Solution {
public:
/*
类接雨水,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)
*/
int largestRectangleArea(vector<int>& heights) {
stack<int> st; // 存下标
st.push(0);
int result = 0;
heights.insert(heights.begin(),0);heights.push_back(0);
for(int i = 1;i < heights.size();i++){
while(!st.empty() && heights[i] < heights[st.top()]){
int mid = st.top();st.pop();
if(!st.empty()){
int h = heights[mid]; // 以当前取出元素为基准
int w = i - st.top() - 1;
result = max(result,h*w);
}
}
st.push(i);
}
return result;
}
};
标签:last,int,st,60,柱状图,result,heights
From: https://www.cnblogs.com/tazdingo/p/18102150