采用双指针分别指向左右两端, 需要容纳最多的水, 容纳的水量=两个指针指向的数字中较小值∗指针之间的距离,两指针相减为宽度,取较短一个为长,相乘可得第一个容积。
然后将两个指针指向的较短的一侧移动一格,再次计算容积,用while (l < r)依次遍历,最后取最大的结果即可。
class Solution {
public:
int maxArea(vector<int>& height) {
int ans = 0;//容量
int l = 0, r = height.size() - 1;//左右指针
while (l < r) {
ans = max(ans, min(height[l], height[r]) * (r - l));
if (height[l] < height[r])//小的指针移动
l++;
else
r--;
}
return ans;
}
};