题目:给出一个直方图(如图所示),求出所给直方图中所包含的最大矩阵面积。直方图可以用一个整数数组表示,如上图为[2, 1, 5, 6, 2, 3]。每个直方块的宽度均为1。上图中包含的最大矩阵面积为10。来源:http://www.jiuzhang.com/problem/43/
解题思路:如果对于每个直方块,找到从它开始往左边数第一个比它小的,和往右边数第一个比他小的,则可以确定出以该直方块为最矮一块的矩阵的最大面积。使用数据结构栈,栈中保存递增序列,从左到右依次遍历每个数让其入栈,入栈之前先pop出所有>=该数的数,从而保持栈中的递增序列。pop完之后的栈顶元素即为该数往左边数第一个比他小的数。同理反过来遍历一次可以得到往右边数第一个比他小的数。时间复杂度O(n),空间复杂度O(n)。
代码实现:
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Rectangle {