• 盛水最多的容器


    题目:给定 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
  • 相关阅读:
    第二周作业修改+
    第三周作业
    第二周作业修改
    第三次作业
    第二次作业
    获奖感想
    最后的作业
    14周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11382031.html
Copyright © 2020-2023  润新知