跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode11盛最多水的容器

啊啊,这个题想的复杂了,总以为用例没有包含某种特殊情况,就是一直左右相等的情况。慢慢想了下发现想错了。
这个题,就用双指针。左右逼近。小的移动,因为只要互相靠近,那就说明底变短了,希望最低的高变大,来放更多的水。嗯,就是这样。所以左右相等的时候,随便走一个,水肯定是少了,比较最低的高,只会更低,不会更高。
Tags array | two-pointers
题目:

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

说明:你不能倾斜容器,且 n 的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

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

好了,直接看代码
code:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        l = 0
        r = len(height)-1
        maxnum = 0
        while l < r:
            num = min(height[l], height[r]) * (r-l)
            maxnum = max(maxnum, num)
            if height[l] < height[r]:
                l += 1
            else:
                r -= 1

        return maxnum

好了。就这样吧。

猜你喜欢

转载自blog.csdn.net/mianjiong2855/article/details/107428246