public int maxArea(int[] height) {
// 初始化最大盛水量为0
int res = 0;
// 使用双指针,i从数组起始位置开始,j从数组末尾开始
int i = 0;
int j = height.length - 1;
// 双指针向中间移动,直到相遇
while (i < j) {
// 计算当前双指针对应的容器的盛水量
// 底边长度 = j - i,高度取两柱子中较矮的那个
int area = (j - i) * Math.min(height[i], height[j]);
// 更新最大盛水量
res = Math.max(res, area);
// 关键策略:移动较矮一侧的指针
// 因为容器的盛水量由较矮的柱子决定,移动较高的柱子不会增加盛水量,
// 而移动较矮的柱子可能遇到更高的柱子,从而提升整体盛水量
if (height[i] < height[j]) {
i++; // 左指针右移,寻找更高的左柱子
} else {
j--; // 右指针左移,寻找更高的右柱子
}
}
// 返回遍历过程中找到的最大盛水量
return res;
}