给定n个非负整数a1,a2,…,an,其中每个表示
指向坐标(i,ai)。n画垂直线,使
线i的两个端点位于(i,ai)和(i,0)找两行,
与X轴一起形成容器,使得容器
含水量最多。
注意:您不能倾斜容器。
一种解决办法是我们每一条线都取一条线,找出每一条线的面积这需要O(n^2)时间效率不高。
另一种解决方案是使用DP找到每个索引的最大区域,然后在索引n处,我们将得到最大区域。
我想是O(n)。
有没有更好的解决方案?

最佳答案

这里的许多人把这个问题误认为是最大矩形问题,事实并非如此。
解决方案
删除所有元素aj,使ai>=aj=j求最大值
设as=a1
对于j=2到m-1,如果as>=aj,则删除aj,否则as=aj
设为
对于j=n-1到m+1,如果as>=aj,则删除aj,否则as=aj
注意,得到的值看起来像金字塔,也就是说,左边的所有元素都在严格地增加,右边是严格减少的。
i=1,j=n.m是最大值的位置。
当i=m时
找到ai和aj之间的区域并跟踪最大值
如果ai复杂性是线性的(O(n))

关于algorithm - 找到最大可能的面积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10670301/

10-12 16:39