解析:
- 一个指针在数组的开始(我们称之为
L
),另一个在数组的末尾(称之为R
)。 - 然后,我们计算当前
L
和R
之间的容器可以容纳的水的量,这个量由两个指针之间的距离(R - L
)和两个指针指向的高度中较小的那个决定(因为水的高度不能超过两边中较低的那个)。 - 每次迭代后,我们将较矮的那个指针向另一个指针的方向移动一步(因为如果移动较高的那个指针,容器的高度不会增加,而宽度会减少,所以容积只可能变小)。
代码如下:
class Solution {
public int maxArea(int[] height) {
if (height==null||height.length==0){
return 0;
}
int L=0;
int R=height.length-1;
int max=0;
while (L<R){
int w=R-L;
int h=Math.min(height[L],height[R]);
max=Math.max(max,w*h);
if (height[L]>height[R]){
R--;
}else {
L++;
}
}
return max;
}
}