zoukankan      html  css  js  c++  java
  • 盛水最多的容器

    题目:给定 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
  • 相关阅读:
    信息安全系统设计基础第二周学习总结
    java实验报告五
    java实验报告三
    java实验报告二
    java实验报告一
    mysql
    C语言理论知识
    数据存储与输出输入
    软件开发概述 编程语言概述
    C语言 常用单词
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11382031.html
Copyright © 2011-2022 走看看