leetcode.array--11. Container With Most Water

本文详细解析了LeetCode上的第11题——盛最多水的容器问题,并提供了一种有效的O(n)算法解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:11. Container With Most Water

问题描述:https://leetcode.com/problems/container-with-most-water/description/

最容易的n方超时,于是想想怎么降低

其实对于横坐标为i和j的两条线段(i初始值为0,j初始值为len(height)-1),其最大容积vmax=min(height[i],height[j])*(j-i)。考虑如下情况:当height[i]<height[j]时,此时容器高度为height[i],下一步如何做?i++还是j--?假设做j--取线段j的左边一条线段,如果此时的height[j]仍大于height[i],由于底变短了高不变因此容积减小;如果此时的height[j]小于height[i],会造成容器的高减小变为height[j]并且底边减小,因此容积减小。于是选择i++,即取线段i的右边一条,此时由于底减少而高度有可能增加会导致容积可能增大。因此O(n)可解决了。

代码:

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        res=0;i=0;j=len(height)-1
        while i<j:
            res=max(res,min(height[i],height[j])*(j-i))
            if height[i]<height[j]:
                i+=1
            else:
                j-=1
        return res


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值