跳过正文
  1. leetcode 题解/

11_盛最多水的容器

·69 字·1 分钟

类型:数组

    1. 盛最多水的容器 💛

    https://leetcode-cn.com/problems/container-with-most-water/

    ❓ 给你一个 height 数组,代表木板高度,相邻木板间隔为 1 个单位。问最大的容水量。

    💡 双指针

    开始时,左右指针分别指向数组的左右两端。

    此时我们需要移动一个指针,移动哪一个呢?我们应该移动对应数字较小的那个指针。

    容水量 = 两个指针指向数字中的较小值 * 指针距离

    如果我们移动较大的那个指针,那么「两个指针指向数字中的较小值」不会增加,「指针之间的距离」会减小,容水量必然减小。

    class Solution:
        def maxArea(self, height: List[int]) -> int:
            l, r = 0, len(height) - 1
            ans = 0
            while l < r:
                area = min(height[l], height[r]) * (r - l)
                ans = max(ans, area)
                if height[l] <= height[r]:
                    l += 1
                else:
                    r -= 1
            return ans

    时间复杂度:O(n),双指针总计最多遍历数组一次

    空间复杂度:O(1)