leetcode 11. 盛最多水的容器

该算法利用左右指针策略找到数组中能构成最大矩形面积的两个高度值,通过比较左右挡板高度调整指针,保证面积增大的可能性。在左右挡板相等时,可能存在更长的挡板使得面积增大,但最终会回归到最长挡板边界。该方法不断排除不可能的最大面积状态,直至找到最优解。
摘要由CSDN通过智能技术生成

思路就是左右指针。
初始是左指针在数组开头,右指针在结尾。
当我们往内收指针的时候,矩形的长(我们看作横坐标)会缩小。要使矩形面积变大,只有当宽度增加的时候才有可能。而且由于短板效应,宽度会取决于短的那条挡板。所以如果你的上限是你的短的那一条。而你必须要改变你的上限,才会使得总体面积变大。你移动长的那条挡板,结果永远不会比现在好,为什么?因为矩形长缩小,宽度不会变化甚至可能会变小,面积肯定不会变大。但如果你移动短的那根挡板,如果移动到更长的,你的面积才会有可能变大。所以直接排除了不可能成为面积最大值的状态了。

当左右挡板相等呢?要使面积变大,那中间可能又有两根比左右更长的挡板才有可能。然后不管谁先移动,左挡板最终回到最边更长,右挡板最终回到右边更长。所以不会有遗漏。

其实就是不断消去不可能为最大值的状态。

class Solution:
    def maxArea(self, height: List[int]) -> int:
        left = 0
        right = len(height) - 1
        max_area = 0
        while left < right:
            max_area = max(max_area, (right-left) * min(height[right], height[left]))
            if height[right] > height[left]:
                left += 1
            else:
                right -= 1
        return max_area
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值