Leetcode : 11 Container With Most Water

题目如下:

11Container With Most Water


Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.



代码如下:

class Solution:
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        l=len(height)
        maxare=min(height[0],height[-1])*(l-1)
        left=0
        right=l-1
        while(left<right):
            if(height[left]>height[right]):
                right=right-1
            else:
                left=left+1
            maxare=max(maxare,(min(height[left],height[right])*(right-left)))
        return maxare



分析如下:

因为容器的容量是由挡板的最短长度和底的宽度来决定的,所以

一开始先选择最左和最右的两个挡板,此时的底长是最长的,

再比较两边挡板的大小,选择一边往中间收一格,若是较大的那块板移动,

则容器的容量只会变得更小或者不变(因为高度已经被较小那块板限死,而底宽一定变小)

所以每一次都选择移动左右板中比较小的那一块,没移动一次就获得一个容量值,

用一个max变量来记录出现的容量值中的最大值,

重复此操作,直到左板和右板相碰,即得到了容量的最大值。


结果如下:



猜你喜欢

转载自blog.csdn.net/qq_41794348/article/details/80317697