[Leetcode] Largest Rectangle in Histogram
首先感谢网友的分享[1] [2]
一、找单调递增的序列,当遇到第一个递减元素的时候进行面积的计算。为什么这个时候可以进行面积的计算?
假设当前的序列为:
.....,2,4,5,6,3,......
那么我们可以确定2之前的元素都是比2小的,现在遇到了第一个递减元素3,那么此时4->6,5->6,6->之间面积可以计算了,因为3的存在后面的所有矩形面积不会以4,5,6开头,因为他们最多到达4,5,6,原因是这里的4,5,6都比3要大。
二、通过上面的方式,实际上我们找到了某个元素的右边界,如何找到左边界,也就是这个高度开始发生作用的索引位置:在上面的面积计算当中就可以找到,也就是最后一次面积计算当中,所对应的index
对于上面的例子是4所对应的索引位置。
再举一个例子,
2,4,5,6,3,5,2.5当检测到5的时候状态为:
index height
0 ,2
1 ,3
5 ,5
在检测到2.5是发生面积计算过程
对于5,5计算为(5-5+1)*5=5
对于1,3计算为(5-1+1)*3=15
0,2不再满足计算条件,结束,同时得到一个新的pair 1,2.5
这里2.5的起始index为什么是1,因为 1,3 是最后一个满足上面计算条件的位置,他的起始位置是在1,满足的都应该是大于2.5的位置,3所对应的位置都是大于等于3的,所以一定大于等于2.5
在前面的小于2.5的元素本身就不可能和2.5配对,所以他的的起始位置即使再大也不会成为和2.5配对的元素。
[1] http://m.blog.csdn.net/blog/SUN20082567/37566967
[2] http://blog.csdn.net/beiyetengqing/article/details/8258232