# 给定
# n
# 个非负整数
# a1，a2，...，an，每个数代表坐标中的一个点(i, ai) 。在坐标内画
# n
# 条垂直线，垂直线
# i
# 的两个端点分别为(i, ai)
# 和(i, 0)。找出其中的两条线，使得它们与
# x
# 轴共同构成的容器可以容纳最多的水。
#
# 说明：你不能倾斜容器，且
# n
# 的值至少为
# 2。
#
#
#
# 图中垂直线代表输入数组[1, 8, 6, 2, 5, 4, 8, 3, 7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为
# 49。
#
#
#
# 示例:
#
# 输入: [1, 8, 6, 2, 5, 4, 8, 3, 7]
# 输出: 49

class Solution:
    def maxArea(self, height: List[int]) -> int:
        # 利用双指针法，l指针在左端，r指针在右端
        # 容器面积受限于l和r中较短的一方，故当双指针较短的一方向内移动时，
        # 容易的宽度虽然在减少，但是容器面积可能由高度的增加而增加。
        # 每次移动的时候更新容器的最大值。
        maxarea = 0
        l,r = 0,len(height) - 1
        while l < r:
            maxarea = max(maxarea,min(height[l],height[r])*(r-l))
            if height[l] < height[r]:
                l += 1
            else:
                r -= 1
        return maxarea