84. 柱状图中最大的矩形
问题
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
分析
单调栈。要注意处理逻辑有两点易错:
- 如果输入序列单调递增,那么如何处理;
- 如果是[2,1,3],该如何处理。
代码
class Solution {
public:
stack<pair<int, int> > stk; // val, start index
int h_n = 0;
int res = -1;
int largestRectangleArea(vector<int>& heights) {
heights.push_back(-1); // 确保递增heights时,也可以处理到栈为空。或者在下面让栈处理到空也行。
h_n = heights.size();
for (int i = 0; i < h_n; i++) {
int start = i; // start记录开始的位置,例如2,1,3,值1的start显然是0,而不能是1.
while(!stk.empty() && stk.top().first > heights[i]) {
start = stk.top().second;
res = max(res, (i-1-start+1)*stk.top().first);
stk.pop();
}
stk.push(make_pair(heights[i], start));
}
return res;
}
};

浙公网安备 33010602011771号