题目:
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明: 你不能倾斜容器。
思路:
使用相向双指针
一个指向第一个元素left,一个指向最后一个元素right
不断缩小两个指针
怎么缩小呢?
如果left的高度小于right的高度,就移动left,因为再移动right的话,不论是大是小都是以最低的这个left的高度为边,而且宽度还变小了,所以容积不可能更大了
所以我们的规则就是,谁小动谁
代码:
var maxArea = function (height) {
//相向双指针
//如果
let res = 0;
let len = height.length;
let l = 0;
let r = len - 1;
while (l < r) {
//计算容器容积
const capa = Math.min(height[l], height[r]) * (r - l) ;
res = res > capa ? res : capa;
if (height[l] < height[r]) {
l++;
} else {
r--;
}
}
return res;
};