【发布时间】:2012-05-27 01:42:23
【问题描述】:
给定 n 个非负整数 a1, a2, ..., an,其中每个代表一个 点坐标 (i, ai)。绘制 n 条垂直线,使得 线 i 的两个端点在 (i, ai) 和 (i, 0)。找到两条线, 它与 x 轴一起形成一个容器,使得容器 含有最多的水。
注意:您不能倾斜容器。
一种解决方案可能是我们采用每一行并找到每一行的区域。这需要 O(n^2)。没有时间效率。
另一种解决方案是使用 DP 找到每个索引的最大面积,然后在索引 n 处,我们将获得最大面积。 我认为是 O(n)。
有没有更好的解决方案?
【问题讨论】:
-
您能详细说明您正在考虑的 DP。由于 i 和 ai 之间没有关系,我认为你必须考虑所有组合,因为对于两个点 i 和 j,面积将为 (i-j)*min(ai,aj)。我认为您无法将其最大化。
-
@J.F.Sebastian 不确定问题是否相同。举个简单的例子:100, x, 200。如果 x
-
@ElKamina:你是对的。我应该说这些问题只是相关的。