码迷,mamicode.com
首页 > 其他好文 > 详细

盛水最多的容器

时间:2019-08-20 12:40:37      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:双指针   垂直   none   max   open   img   class   click   else   

题目:给定 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

 

盛水最多的容器

标签:双指针   垂直   none   max   open   img   class   click   else   

原文地址:https://www.cnblogs.com/xxswkl/p/11382031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!