LeetCode 热题 100 —— 5.盛水最多的容器(Javascript解法)
·
一、题目要求
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
二、解题思路
核心:双指针,用两个指针分别指向数组的两端,每次计算当前两条线围成的面积。
然后移动较矮的那一侧的指针(向内移动),因为:
-
面积取决于较短的那条边和宽度。
-
如果移动较长的边,宽度变小,但高度最多还是由较短的边决定,面积不可能增大;
-
而移动较短的边,虽然宽度变小,但高度有可能变大,面积可能增大。
所以,每次都移动较矮的一侧,保证不遗漏最优解,时间复杂度 O(n)。
三、代码
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let left = 0;
let right = height.length - 1;
let maxWater = 0;
while(left < right){
const minHeight = Math.min(height[left],height[right]);
const width = right - left;
const water = minHeight * width;
maxWater = Math.max(water,maxWater);
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return maxWater
};
更多推荐
所有评论(0)