1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public int maxArea(int[] height) {
int left = 0; // 左指针
int right = height.length - 1; // 右指针
int ans = 0; // 记录最大面积,初始为0(面积非负)
// 双指针相向遍历,直到指针相遇
while (left < right) {
// 计算当前容器面积并更新最大值:宽度(左右指针间距) × 有效高度(矮柱子决定,取最小值)
ans = Math.max(ans, (right - left) * Math.min(height[right], height[left]));
// 移动更矮的柱子指针(只有这样才有可能增大有效高度,获得更大面积)
if (height[right] < height[left]) {
right--;
} else {
left++;
}
}
return ans; // 返回最大面积
}
|