Skip to content

第十一题 - 盛最多水的容器 #12

Description

@laizimo

题目描述

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

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

示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49

图片

算法

双指针法

答案

/**
 * 双指针法
 */
var maxArea = function(height) {
    let maxArea = 0;
    //#1 遍历数组
    for (let i = 0, j = height.length - 1; i < j;) {
        //#2 取数
        let h1 = height[i];
        let h2 = height[j];

        //#3 计算面积
        let area = (h1 > h2 ? h2 : h1) * (j - i);
        if (area > maxArea) maxArea = area;

        //#4 进位
        h1 > h2 ? j-- : i++;
    }
    return maxArea;
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions