问题描述:
有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。
给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
测试样例:
[2,7,9,4,1],5
返回:14
分析:这里我们维护一个堆栈,当栈顶中的元素大于当前元素时,那么可能包含栈顶元素的(最后结果)的高度实际上是由当前元素限制死了。所以弹栈。当然了,在弹栈过程中,还需要计算弹出栈的面积。因为栈中维护的是一个递增的元素,所以弹栈之后,再弹栈时,右边界实际上变成了最开始弹栈的右边界。
代码如下:
import java.util.*;
public class MaxInnerRec {
class Node{
int left;
int right;
int val;
Node(int left,int right,