【LeetCode】盛最多水的容器(JS实现)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【LeetCode】盛最多水的容器(JS实现)

问题


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


说明:你不能倾斜容器。


网络异常,图片无法展示
|


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


思路


第一反应,暴力破解,把所有的可能算一遍,时间复杂度是O(n2)。这肯定是不行的,于是我们需要找找规律。


我们现在有两个指针,分别指向第一根和最后一根。


假设  第一根高度是  H1,最后一根高度是Hn,H1大于Hn,所以他们围出来的面积是多少呢?


Hn*(n-1)。


现在我们要让其中一根指针向里移动,还要面积有可能上升。我们思考,面积取决于两根柱子的距离和两根柱子中最短的一根。现在,我们向里移动,两个指针指向的柱子的相对距离变短了,我们为了面积上升,只能选择让 两根柱子中较短的那一根长度较长,于是,我们要移动指向较短的柱子的那一个指针。


循环上述操作,两个指针相遇时结束循环,完成遍历。


于是,经过分析和双指针的引入,时间复杂度从O(n2)变成了O(n)


代码


var maxArea = function(height) {
    let frontPoint = 0;
    let endPoint = height.length - 1;
    let max = 0;
    while (frontPoint < endPoint) {
        max = Math.max(max, (endPoint - frontPoint) * (height[frontPoint] > height[endPoint] ? height[endPoint--]: height[frontPoint++]))
    }
    return max;
};


网络异常,图片无法展示
|

相关文章
|
2月前
|
容器
Leetcode第十一题(盛最多水的容器)
LeetCode第十一题要求找出两条线,使得它们与x轴构成的容器能盛最多的水,通常使用双指针法来解决,通过移动较短的一边来尝试增加容量。
14 0
Leetcode第十一题(盛最多水的容器)
|
4月前
|
算法 容器
LeetCode第11题盛最多水的容器
该文章介绍了 LeetCode 第 11 题盛最多水的容器的解法,通过分析得出只能移动短板才可能使面积变大的规律,使用双指针法解决该问题,避免了穷举法的高时间复杂度,并总结了算法题需要多实践、思考和积累技巧来提升解题能力。
LeetCode第11题盛最多水的容器
|
4月前
|
Python 容器
【Leetcode刷题Python】11. 盛最多水的容器
解决LeetCode "盛最多水的容器" 问题的Python实现代码,使用了双指针的方法来找出能够容纳最多水的两条线。代码中定义了两个指针i和j,分别从数组的两端向中间遍历,通过计算两个指针所指高度的较小值与它们之间的距离的乘积来更新最大面积res。
35 0
|
5月前
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
215 2
|
6月前
|
算法 测试技术 程序员
力扣经典150题解析之二十八:盛最多水的容器
力扣经典150题解析之二十八:盛最多水的容器
51 0
|
6月前
|
容器
11.盛最多水的容器
11.盛最多水的容器
|
6月前
|
算法 容器
【LeetCode刷题】快乐数、盛水最多的容器
【LeetCode刷题】快乐数、盛水最多的容器
|
6月前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
下一篇
DataWorks