Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

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

Open
laizimo opened this issue May 27, 2020 · 0 comments
Open

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

laizimo opened this issue May 27, 2020 · 0 comments

Comments

@laizimo
Copy link
Owner

laizimo commented May 27, 2020

题目描述

给你 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;
};
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

1 participant