[Leetcode] 11. Container With Most Water

来源:互联网 发布:仰恩大学网络教务系统 编辑:程序博客网 时间:2024/05/31 20:52

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.

这题目和博客前面两个leetcode题有点相似。

思想是container能容纳雨水=min(height[j],height[i])*(j-i) 。因此,如果height[i]<height[j], min(height[j],height[i]) = height[i], 对于任意 i<k<j, 不管height[k]是大于还是小于height[i],所得到的容积也绝对比 height[i]*(j-i)要小,所以就可以不用再计算那些k<j的情况。同理,如果height[j]<height[i], min(height[i],height[j]) = height[j]。 对于任意j>k>i,不管height[k]是大于还是小于height[j],所得到的容积也绝对比不上 height[i]*(j-i)。

代码:

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


0 0