84. 柱形图中最大的矩形
题目描述
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例1:
输入:
h
e
i
g
h
t
s
=
[
2
,
1
,
5
,
6
,
2
,
3
]
heights = [2,1,5,6,2,3]
heights=[2,1,5,6,2,3]
输出:
10
10
10
示例2:
输入:
h
e
i
g
h
t
s
=
[
2
,
4
]
heights = [2,4]
heights=[2,4]
输出:
4
4
4
思路
本题与接雨水的感觉是差不多的,区别在于本题需要找到的是每个柱子左右两边第一个小于该柱子的柱子,所以从栈头到栈底应该是递减的
解法
class Solution {
public int largestRectangleArea(int[] heights) {
int[] newHeight = new int[heights.length+2];
System.arraycopy(heights,0,newHeight,1,heights.length);
newHeight[heights.length+1] = 0;
newHeight[0] = 0;
Stack<Integer> stk = new Stack<>();
stk.push(0);
int res = 0;
for(int i = 1;i<newHeight.length;i++){
while(newHeight[i] < newHeight[stk.peek()]){
int mid = stk.pop();
int w = i-stk.peek()-1;
int h = newHeight[mid];
res = Math.max(res,w*h);
}
stk.push(i);
}
return res;
}
}
总结
单调栈值得再练练,需要在思路上更加清晰一些。

740

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



