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变量来记录出现的容量值中的最大值,

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


结果如下:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值