leetcode 84. 柱状图中最大的矩形
思路: 单调栈
维护一个单调上升的栈。因为保证单调上升以后,从后面开始,每一个都可以作为高。为了方便计算宽度。先压入一个-1即可。
宽度计算的原理:取当前栈顶的元素,在当前栈顶之前的元素都比它小,所以,只要计算栈顶元素,与下一个栈顶元素直接的距离,就是宽了。
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int n=heights.size();
stack<int> sta;
sta.push(-1);
int ans=0;
for(int i=0;i<n;i++)
{
while(sta.top()!=-1&&heights[sta.top()]>heights[i])
{
int tmp=sta.top();
sta.pop();
ans=max(ans,heights[tmp]*(i-sta.top()-1));
}
sta.push(i);
}
while(sta.top()!=-1)
{
int tmp=sta.top();
sta.pop();
ans=max(ans,heights[tmp]*(n-sta.top()-1));
}
return ans;
}
};
还没有评论,来说两句吧...