双指针
分别从两边开始计算当前容量,然后每次都保留最大的容量
left和right指针分别指向头尾,来计算容量,后面只需要合理的来收缩left还有right即可
试想现在是height[left]最小,称之为minHeight,那么要增大容量,那只有两个可能,增大底或者是增大高
1.增大底,这个不可能了,因为left还有right最开始都在首尾
2.增大高,找到第一个大于称之为minHeight即可,也就是代码7、8行,一般来说7、8行只有一个会执行,如果height[left] === height[right]的情况下,那么两行代码都会执行
var maxArea = function (height) {
let left = 0, right = height.length - 1
let max = 0
while (left < right) {
let minHeight = Math.min(height[left], height[right])
max = Math.max(max, (right - left) * minHeight)
while (left < right && height[left] <= minHeight) left++
while (left < right && height[right] <= minHeight) right--
}
return max
};