高级编程技术hw week8

leetcode #11 Container With Most Water

代码如下:

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

解题思路:

我一开始想当然的直接用了两层循环,穷举所有可能性寻找最大值。然后毫无疑问地超时了。于是开始思考时间复杂度更低的算法。之前是从左边开始,固定一端,循环另一端寻找最大值,而这样显然太没效率,因此考虑两端同时移动。而又因为在选定的两条线中,能够决定水容量多少的是较短的一根,所以在初始状态选择最边缘的两根线后,向中间移动时只需要判断两根的长度,保留较长的那根线,然后用一个变量来记录移动过程中所能装下水的最大值。这样移动只能保证在每次移动后,所取到的是接下来更有可能装水容量增加的选择,而通过比较之前记录下的最大值与此次的值,在循环结束时保留下来的就是最大值。

猜你喜欢

转载自blog.csdn.net/weixin_41792764/article/details/80077856
今日推荐