给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2。
首先这是一道动态规划的题目,其中最大容量取决于(两个点的坐标差)X(两个点中较小的那个点的高)
并实时更新最大容量,定两个指针,一个从前向后遍历,一个从后向前,并比较两个指针所指的值得大小,谁小谁移动。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
p1=0
p2=len(height)-1
max_water=0
while p1<p2:
max_water=max(max_water,min(height[p1],height[p2])*(p2-p1))
if height[p1]<height[p2]:
p1+=1
else:
#这里我曾写成了,if height[p1]>=height[p2] 结果肯定错了,因为一次循环中,p1 p2 先判断进行移动了一遍,第二个if 里面的p1 p2 已经变了,再进行一次比较。
p2-=1
return max_water