3种解法 - 计算盛最多水的容器
发布日期:2021-05-08 16:54:36 浏览次数:23 分类:精选文章

本文共 1039 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要找到两条垂直线,使得它们与 x 轴共同构成的容器可以容纳最多的水。这个问题可以通过双指针法高效地解决,时间复杂度为 O(n),空间复杂度为 O(1)。

方法思路

  • 问题分析:每条垂直线的高度由给定的数组中的元素决定。容器的左右边界由两条垂直线构成,容器的高度是这两条线之间的较小高度,容积为两线之间距离与较小高度的乘积。
  • 双指针法:从数组的两端开始,分别用左右两个指针向中间移动。每次移动较低的那一边的指针,以尽可能扩大容积。具体步骤如下:
    • 初始化左指针 l 为 0,右指针 r 为数组长度减 1。
    • 比较左右两边的高度,决定哪边的高度较低,向较高的方向移动较低的指针。
    • 计算当前容积并记录最大值,直到两个指针相遇。
  • 解决代码

    class Solution:
    def MaxArea(self, height):
    n = len(height)
    if n < 2:
    return 0
    l, r = 0, n - 1
    max_area = 0
    while l < r:
    current_height = min(height[l], height[r])
    current_width = r - l
    current_area = current_height * current_width
    if current_area > max_area:
    max_area = current_area
    if height[l] <= height[r]:
    r -= 1
    else:
    l += 1
    return max_area

    代码解释

    • 初始化:左指针 l 从 0 开始,右指针 r 从数组末尾开始。
    • 循环处理:在 l 小于 r 时,计算当前两指针之间的高度和宽度,进而计算容积,更新最大容积。
    • 指针移动:比较左右两边的高度,决定移动哪边的指针,以尽可能扩大容积。
    • 终止条件:当 lr 相遇时,循环终止,返回最大容积。

    这种方法确保了在 O(n) 时间内找到最大容积,适用于较大的数据规模。

    上一篇:2种解法 - 完成跳跃游戏
    下一篇:3种解法 - 实现字符串Z字形变换

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月26日 10时57分24秒