剑指 Offer II 039. 直方图最大矩形面积
-
给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
-
求在该柱状图中,能够勾勒出来的矩形的最大面积。

单调栈
- 如果当前矩形比栈顶矩形高,直接进栈。
- 否则不断取出栈顶,直至栈为空或者栈顶矩形的高度比当前矩形小。
题解
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int> stack;
stack.push(-1);
int area = 0;
int h = 0;
for (int i = 0, length = heights.size(); i < length; i++) {
while (stack.top() != -1 && heights[stack.top()] >= heights[i]) {
h = heights[stack.top()];
stack.pop();
int left = stack.top();
cout <<"-->"<< i <<"-->" <<left <<endl;
area = max(area, h* (i - left - 1));
}
stack.push(i);
}
int a=0;
while (stack.top() != -1) {
h = heights[stack.top()];
stack.pop();
a = h * (heights.size() - stack.top() - 1);
area = max(area, a);
}
return area;
}
};



- 只能记录单向增长的过程

2*1(=3 -1-1)
1*3(=3 --1-1)
文章介绍了如何使用单调栈解决计算给定柱状图中能形成的最大矩形面积的问题。算法思路是对比当前柱子高度和栈顶柱子高度,当栈顶柱子高度大于等于当前柱子时进栈,否则出栈并更新最大面积。这种方法适用于解决寻找下一个更大或更小元素的问题。
663

被折叠的 条评论
为什么被折叠?



