给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
**说明:**你不能倾斜容器。
如下为代码:
cpp
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0, right = height.size() - 1;
int max_area = 0;
while (left < right) {
// 计算当前容器的水量
int current_area = min(height[left], height[right]) * (right - left);
// 更新最大水量
max_area = max(max_area, current_area);
// 移动指针
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return max_area;
}
};
- 初始化两个指针,
left
指向数组的开头,right
指向数组的末尾。 - 每次计算当前指针所指的两条线所能容纳的水量,并更新最大水量。
- 根据容器的高度,移动指针:如果
height[left]
小于height[right]
,则移动left
指针,否则移动right
指针。这样可以尝试更大的水量,因为较短的线影响水量的大小,移动较短的线可能会找到更大的容器。 - 最终返回最大水量。