盛水最多的容器

Posted xxswkl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了盛水最多的容器相关的知识,希望对你有一定的参考价值。

题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
来源:https://leetcode-cn.com/problems/container-with-most-water/

法一:双指针法

思路:由于是求最大的存水面积,易知影响存水面积S的只有两个变量即容器的宽和高,故可以遍历所有的宽和高,但这样算法较为复杂,可以先把宽设为最大,即将指针指向两端,再逐步移动指针使宽减小,每次移动均移动高较小的那个。

技术图片
class Solution:
    def maxArea(self, height) -> int:

        i, j, res = 0, len(height) - 1, 0
        while i < j:
            if height[i] < height[j]:
                res = max(res, height[i] * (j - i))
                i += 1
            else:
                res = max(res, height[j] * (j - i))

        j -= 1
        return res

if __name__ == __main__:
    duixiang = Solution()

    ww = duixiang.maxArea([1,8,6,2,5,4,8,3,7])
    print(结果是:, ww)
View Code

 

以上是关于盛水最多的容器的主要内容,如果未能解决你的问题,请参考以下文章

11.盛水最多的容器

leetcode 盛水最多的容器(双指针)

leetcode第11题:盛水最多的容器

LeetCode_11_盛水最多的容器

LeetCode第11题 盛水最多的容器

Leetcode 11 盛水最多的容器 贪心算法