leetcode.array--11. Container With Most Water

来源:互联网 发布:日本电脑软件 编辑:程序博客网 时间:2024/05/22 00:24
题目: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


原创粉丝点击