F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[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

posted on 2015-08-14 17:24  F_G  阅读(134)  评论(0编辑  收藏  举报