首先来看下水量怎么计算~
计算水量其实也就是计算面积,按照示例 1:height:[1,8,6,2,5,4,8,3,7]。

随便选取两条线 height[i] 与 height[j],它们之间的距离为 j - i,由木桶效应可以得知水量应由短的那条线计算出,看成面积就是:
area=min(height[i],height[j])×(j−i)
- 木桶效应:也可称为短板效应,是讲一只水桶能装多少水取决于它最短的那块木板。
然后思考应该怎么找到让其水量最大的两条线~
水量最大也就是面积最大,我们可以先让 j - i 最大,也就是先选取左右两侧最边上的两条线,从外向里找起。我们假设 height[i] 这条线长一些,即 height[i] > heigth[j],移动 i 或者移动 j 可以分情况考虑:
- 移动
i即i = i + 1:此时j - i肯定会变小,那么height[i + 1]即使变大了,但由于面积取决于短的那条线height[j],面积肯定也会减少。 - 移动
j即j = j - 1:此时j - i虽然肯定变小,但是可能height [j - 1]比原来大了,那么最终的面积有可能变大。
因此我们可以使用双指针指向左右两侧,每次向里移动 height 较小的指针,试图找到一个更大的面积。
javascript
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function (height) {
let max = 0,
left = 0,
right = height.length - 1
while (left < right) {
const contain = Math.min(height[left], height[right]) * (right - left)
max = Math.max(contain, max)
height[left] < height[right] ? left++ : right--
}
return max
}