思路
用到了单调栈。由于最大矩形它的高一定是height数组中的其中一个值,那么我们就可以遍历数组height的值再乘上它的宽的最大值WidthMax(宽的最大值后面会讲),然后取最大值就是答案,也就是ans=max(ans,WidthMax*height[x])。
那么如何求高为height[x]的宽的最大值WidthMax呢?
解题过程
如图,以黄色块为高所能撑起的最大范围即为红色部分,(数组heigh中的每个值都有可能是黄色块,所以后面要遍历一下)那么问题就转变为:
1.求从x开始的左边找第一个高度小于heigh[x]的长方形的下标l
2.同理,求从x的右边第一个小于heigh[x]的长方形的下标r
3.矩形的宽的最大值为WidhMax = r -l -1
那么问题又转变为如何求上面的l和r?
对于求r,此问题不就是已知数组的下标,求该下标开始从右边开始找第一个更小值吗?此时就可以用单调栈的思想来预处理每个点的右边界的值了,该过程与力扣中https://leetcode.cn/problems/next-greater-element-i/description/这道题相似,不懂单调栈的可以先做那道题
那么l也同理,从左边开始找第一个更小值的下标
那么r[x]和l[x]就求出来了,
最后遍历每个小长方形,求(height[x]*(r[x]-l[x]-1))的最大值就是答案了
时间复杂度:
标签:LCR,int,top,heights,力扣,柱状图,ans,下标,最大值 From: https://www.cnblogs.com/puningyyb/p/18316702