如图柱状图,求最大矩形面积。假设输入高度为
2 1 4 5 1 3 3
则最大矩形面积应该为4*2=8
解题思路如下:设矩形为一个二元组(x,y),x为高度,y为宽,在栈内存储这些二元组
高度为2元素进栈,栈内存储(2,1)
高度为1元素进栈,从栈顶开始删除高度大于或等于1的二元组,因为其已经不可以继续向右延续了,同时用弹出二元组更新最大矩形面积为2*1=2,然后把它的宽度1累加到当前高度为1的准备进栈的矩形,栈内存储(1,2)
高度为4元素进栈,栈内元素高度都小于4,不需要弹出元素和更新最大矩形面积,栈内存储(1,2),(4,1)
高度为5的元素进栈,当前栈为(1,2),(4,1),(5,1)
高度为1的元素进栈,从栈顶开始删除高度大于等于1的二元组,删除(5,1),更新最大面积为5*1=5,将1累加到下一个元素得(4,2),删除更新最大面积为4*2=8,将2累加到下一个元素得(1,4),删除,最大面积不更新,将4累加至新入栈元素得(1,5),栈内元素为(1,5)
高度为3的元素入栈,栈内元素为(1,5),(3,1)
高度为3的元素入栈,删除(3,1),不必更新最大面积,将1累加到栈顶元素得(3,2),栈内元素为(1,5),(3,2)
将栈内元素逐一弹出,(3,2)出栈,不必更新最大面积,将2累加到下一元素得(1,7),(1,7)出栈,不必更新最大面积
因此得到最大面积为8