Typescript-Algorithms
    Preparing search index...

    Variable container_with_most_waterConst

    container_with_most_water: (height: number[]) => number = maxArea

    11.盛最多水的容器

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

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

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

    说明: 你不能倾斜容器。


    示例1

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


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


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

    Type declaration

      • (height: number[]): number
      • Parameters

        • height: number[]

        Returns number

    • 柱子A高 === 柱子B高
    • 柱子A高 > 柱子B高
    • 柱子A高 < 柱子B高

    容器面积 = 宽度 × 高度

    • 宽度:根据题目要求只有变小的趋势
    • 高度:由较矮的柱子决定
    • 移动任意一根柱子,容器高度都会变小

    移动高柱子:

    • 可能变得比矮柱子还矮
    • 可能变得跟矮柱子一样高
    • 可能还是比矮柱子高
    • 结论:移动高柱子只会让容器高度变小

    移动矮柱子:

    • 可能变得比当前还矮
    • 可能变得跟当前一样高
    • 可能变得跟高柱子一样高
    • 可能变得比高柱子还高
    • 结论:移动矮柱子有可能让容器高度变大

    移动较矮的柱子,不断尝试当前能够围成的容器面积,更新最大面积值

    function maxArea(height: number[]): number {
    let l = 0;
    let r = height.length - 1;
    let max = 0; // 面积= 长*宽

    while (l < r) {
    const area = (r - l) * Math.min(height[l], height[r]);
    max = Math.max(area, max);

    if (height[l] <= height[r]) {
    l++;
    }
    else {
    r--;
    }
    }

    return max;
    };