• 算法题:盛最多水的容器


    这个题目乍一看就是双指针,没想到官方解答也是双指针,我在官方的基础上优化了一下下,左右两边各一个指针,每次移动短的那一头的时候,不是移动一格,而是找到比短的那一头要长一点的,再进行比较。(本题完整题目附在了最后面)

    代码如下:

    1. class Solution(object):
    2. def maxArea(self, height):
    3. left = 0
    4. right = len(height) - 1
    5. max_volume = 0
    6. while left < right:
    7. max_volume = max(max_volume, (right - left) * min(height[left], height[right]))
    8. if height[left] >= height[right]:
    9. value = height[right]
    10. right = right - 1
    11. while right > left and height[right] < value:
    12. right -= 1
    13. elif height[left] < height[right]:
    14. value = height[left]
    15. left = left + 1
    16. while left < right and height[left] < value:
    17. left += 1
    18. return max_volume
    19. if __name__ == '__main__':
    20. sol = Solution()
    21. print(sol.maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]))

    完整题目:

    11. 盛最多水的容器

    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

    找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    返回容器可以储存的最大水量。

    说明:你不能倾斜容器。

    示例 1:

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

    示例 2:

    输入:height = [1,1]
    输出:1
    
    

    提示:

    • n == height.length
    • 2 <= n <= 10^5
    • 0 <= height[i] <= 10^4

  • 相关阅读:
    Java高并发编程实战3,Java内存模型与Java对象结构
    吉比特第三季营收13亿:靠“羊了个羊”走红 卢竑岩获分红3亿
    oracle学习21-修改为静态监听
    3分钟带你了解前端缓存-HTTP缓存
    linux基础
    【后端】HTTP 初识
    okhttp
    大话STL第一期——初识相见恨晚
    Dolphinscheduler的API接口问题
    游戏做好了,那下一步呢 - 打包发布
  • 原文地址:https://blog.csdn.net/m0_37738114/article/details/133587801