问题描述:
给定一个直方图,求这个直方图中最大矩阵对应的面积是多少?
例子:有个图如下 (对应的数组为:[3,2,5,6,1,4,4])
问题分析:
针对这个问题,最简单的是遍历法,复杂度O(n^2),该方法容易理解,此处着重解释下第二种:利用单调递增栈。
关于该方法的步骤,网上有很多介绍,但是把步骤看完后,还是难以理解,现在终于搞明白了。这里仅仅把自己学习中的疑难点列出来,希望能够帮助到大家更深入理解该方法。
弹出栈时面积计算:
注意栈中存储的是索引,每次数据出栈时是以出栈元素为左边界(即该索引的值为长方形的高),以待入栈元素为右边界(不包含),然后用(待入栈元素的索引-出栈元素的索引)作为长方向的宽度。
如上图,待入栈2(索引4),待出栈6(索引3),
面积( 4-3)*6=6