写点什么

LeetCode 题解:11. 盛最多水的容器,while 循环双指针,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2020 年 08 月 21 日
LeetCode题解:11. 盛最多水的容器,while循环双指针,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/container-with-most-water/


解题思路:


可以参考官方题解和[双指针法正确性证明](https://leetcode-cn.com/problems/container-with-most-water/solution/shuang-zhi-zhen-fa-zheng-que-xing-zheng-ming-by-r3/)


  1. 使用两个指针分别指向数组的头尾,对比两个指针对应的值,将值小的指针向内移动。

  2. 移动的对比每个位置的面积,取最大值并缓存。

  3. 两个指针不断移动,最后必然相遇,此时已完成对数组的遍历,缓存的值即为容纳最多水的值。

  4. 该题解使用 while 循环进行双指针遍历,但其需要多出两行代码定义指针变量,建议还是使用 for 循环,代码更为精简。


/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function (height) {
let result = 0; // 缓存结果
let i = 0; // 从头遍历的指针
let j = height.length - 1; // 从尾部遍历的指针
// 使用while循环遍历,当i与j相遇时,退出循环
while (i < j) {
// 查找较矮的高度,将其用于计算面积,之后将取值过的指针向内移动,继续遍历。
const minHeight = height[i] < height[j] ? height[i++] : height[j--];
// 计算当前面积,由于计算高度之后,指针已经移动过一次,此处宽度要加1
const area = minHeight * (j - i + 1);
// 对比当前面积和缓存的面积,保存最大值
result = Math.max(area, result);
}
// 退出循环时,缓存的值就是最大值。
return result;
};

复制代码


发布于: 2020 年 08 月 21 日阅读数: 60
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:11. 盛最多水的容器,while循环双指针,JavaScript,详细注释