1)刚开始的时候,最左边的柱子和最右的柱子,形成的容器宽度最大。
1)如果移动较高的柱子,由于容器的宽度在变小,而容器的高度一定不会增加,所以容器的可以容纳的水的面积在变小。
2)所以,只能移动较短的柱子,然后计算此时容器的面积,再与之前记录的面积 res 进行比较,保存那个更大的值。
class Solution {
public int maxArea(int[] height) {
//指向最左边的柱子
int left = 0;
//指向最右边的柱子
int right = height.length - 1;
//用于保存最大的容器面积
int res = 0;
//如果左边和右边的指针没有相遇
while(left < right){
//容器的高度是两个高度中的较小者
int h = Math.min(height[right],height[left]);
//宽度是右边示数减去左边示数
int width = right - left;
//面积是宽度和高度的和
int area = h * width;
//如果新的得到的面积大于记录的最大面积
if(area >= res){
//更新记录的最大面积
res = area;
}
//如果左边指针指向的高度更小,移动左指针
if(height[left] < height[right]){
left++;
}else{//否则移动右边指针
right--;
}
}
//将结果返回
return res;
}
}