leetcode 11. Container With Most Water

来源:互联网 发布:上杉升 知乎 编辑:程序博客网 时间:2024/05/17 12:55

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
原创粉丝点击