给定 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
class Solution:
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
# 第一种方法 传统遍历全部得出结果,运算超时
## area = 0
## for i in range(len(height)):
## index1 = i
## for j in range(i+1, len(height)):
## index2 = j
## x = index2 - index1
## y = min(height[i], height[j])
## temp = x*y
## area = max(area, temp)
##
## return area
# 第二种方法 设置左右指针 减少遍历
l = 0 # 左
r = len(height)-1 # 右
if height=="" or len(height)==1:
return 0
area = min(height[l], height[r])*(r-l)
while l<r:
if height[l]<height[r]:
if area>height[l]*(r-l):
area = area
else:
area = height[l]*(r-l)
l += 1
else:
if area>height[r]*(r-l):
area = area
else:
area = height[r]*(r-l)
r -= 1
return area