Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
给定n个非负整数a1,a2,…,an,其中每个代表一个点坐标(i,ai)。 n个垂直线段例如线段的两个端点在(i,ai)和(i,0)。 找到两个线段,与x轴形成一个容器,使其包含最多的水。
思路:定义current_start和current_end来记录当前的位置,定义start和end去遍历,基于贪心策略,从两侧向中间变化,每次变化数组start和end位置里值小的那个位置,如果算出的容量大于之前计算的容量,才改变current的值和most_water值。最后返回most_water值。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
start = 0
end = len(height) - 1
most_water = (end - start) * min(height[start], height[end])
current_start = start
current_end = end
while start < end:
if height[start] <= height[end]:
start += 1
water = (end - start) * min(height[start], height[end])
if water > most_water:
most_water = water
current_start = start
else:
end -= 1
water = (end - start) * min(height[start], height[end])
if water > most_water:
most_water = water
current_end = end
return most_water