给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
示例 1:
输入: height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
解释: 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
思路分析
- 双指针(对撞指针),左指针从左往右,右指针从右往左
- 哪边指针小就移动哪边(相同时移动任意一边都可以),直到指针相撞(遍历完所有)。不断试错更新最大值
- 返回最大值。
code:
let l = 0, r = height.length - 1;
let maxWaters = 0;
while(l < r){
let w = r - l;
let h = Math.min(height[l], height[r]);
maxWaters = Math.max(maxWaters, w * h);
if(height[l] < height[r]){
l++
}else{
r--
}
}
return maxWaters;
}