题目描述
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路
- 一前一后指针,前后指针的差即为容器的底
- 无论前指针后移一位,还是后指针前移一位,底的值都不变
- 这时如果前指针指的值小于后指针,则前指针后移;反之,后指针前移
- 因为在保持底一定时,我们需保留最大的高来尽量算出后面的最大值
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height)<2:
return 0
i=0
j=len(height)-1
maxnum=0
while i<j:
ground=j-i
if height[i]<=height[j]:
high=height[i]
i+=1
else:
high=height[j]
j-=1
area=ground*high
if area>maxnum:
maxnum=area
return maxnum