思想:从两边向中间进行靠拢,计算最大的面积,移动最低的值,来计算面积,面积大于之前的面积时,更新最大面积。
public static int maxArea(int[] height) {
// 面积
int area = 0;
// 最左边的值下标
int left = 0;
// 最右边值的下标
int right = height.length - 1;
for (int i = 0; i < height.length; i++) {
// 当两个值相等时,说明已经全部比较完毕,当right>left 时,就是重复比较了。就没得必要
if(left >= right){
return area;
}
// 取左边的值
int leftInt = height[left];
// 取右边的值
int rightInt = height[right];
// 计算面积
int min = Math.min(leftInt, rightInt);
// 更新面积
area = Math.max(area,(right-left)*min);
// 将值最低的一位,向中间移动。相等的时候,哪一个值都可
if(leftInt < rightInt){
left++;
}else {
right--;
}
}
return area;
}