前端路由方式—Hash路由和History路由

Python3实现快速排序

  返回  

力扣(leetcode) 11. 盛最多水的容器 (短板木桶原理详解)

2021/7/21 9:24:14 浏览:

题目在这:https://leetcode-cn.com/problems/container-with-most-water/

思路分析:

本题容易想到使用双指针维护水桶的左边和右边。
开始时,L指向最左端,R指向最右端。
我们将较垂直高度短的那一边往里面挪动。

为什么移动较短的一边?

(本题重点,必看!)

面积取决于短板高度和底面长度 面积 = 短板高 * 底面长

无论是移动短板或者长板,我们都只关注移动后的新短板会不会变长,所构成面积会不会变大,而每次移动的木板都只有三种情况,比原板短,比原板长,与原板相等;

如果向内移动短板,对于新的木板 1.比原板更短,则新面积更小,2.比原板更长,则新面积可能变大或不变,3.和原木板相等,则新面积变小;

如向内移动长板,对于新的木板:1.比原短板短,则新面积更小。2.与原短板相等或者比原短板长,则新面积不变或变小。所以,向内移动长板,一定不能使新面积增大。(因为短板没变,即底边变短了,高没变)

完整代码

 def maxArea(self, height: List[int]) -> int:
                
        left = 0
        right = len(height) - 1
        area = 0

        while left < right:
            cur = min(height[left], height[right]) * (right - left) # 面积 = 短板高 * 底面长
            area = max(area, cur)
            # 较短的垂直线往中间移动
            if height[left] < height[right]:
                left += 1
            else: # 长的往中间动
                right -= 1

        return area

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号