剑指 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)