代码随想录算法训练营第六十三天|84.柱状图中最大的矩形
84.柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
题解:找到当前元素的左右两边比它小的值。单调栈是递减的。
在height数组的两边加上0,触发计算。
代码:
class Solution {
public int largestRectangleArea(int[] heights) {
int len=heights.length;
int [] he=new int[len+2];
System.arraycopy(heights,0,he,1,heights.length);
he[len+1]=0;
he[0]=0;
Stack<Integer> s=new Stack<>();
s.push(0);
int res=0;
for(int i=1;i<len+2;i++){
while(he[i]<he[s.peek()]){
int mid=s.pop();
int w=i-s.peek()-1;
int h=he[mid];
res=Math.max(res,w*h);
}
s.push(i);
}
return res;
}
}