11. 盛最多水的容器

Problem

给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。
11. 盛最多水的容器
示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

Too young 思路

也就是既要考虑数组编号,也要考虑数字,因为矩形面积是长乘宽
道理我都懂,但是我不会(理直气壮

Dalao 思路 - 44ms

从两端向内循环,如果L的值小于R,移动L;反之移动R
因为比如(1,3)(2,3)是一样的

代码如下

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        water = 0
        l = 0
        r = len(height) - 1
        
        for i in range(len(height)):
            if height[l] < height[r]:
                water = max(water, height[l]*(r-l))
                l = l + 1

            else:
                water = max(water, height[r]*(r-l))
                r = r - 1
        return water