代码随想录算法训练营第六十三天|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;}
}