题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路:定义两个指针,分别指向list的头和尾,对应容器的左壁和右壁。随后让左壁和右壁不断向中间靠拢,计算得到每次的容积值并更新容积最大的值,直到左壁>=右臂。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
max_area=0 #定义变量max_area存放容积最大值
left=0 #定义左壁的下标
right=len(height)-1 #定义右壁的下标
while(left<right): #保证右壁总是在左壁右边
if(height[left]<height[right]): #找出两壁中较小的那边
area=height[left]*(right-left) #计算此时的容器容积
left+=1
else: #当左壁的高度大于等于右壁时
area=height[right]*(right-left) #计算此时的容器容积
right-=1
max_area=max(max_area,area) #计算得到的面积值跟max_area比较
return max_area