问题分析:
给定一个整数数组 height,表示一系列垂直线的高度。需要找到两条线,使得它们与 x 轴构成的容器能够容纳最多的水。容器的水量由两条线之间的距离(宽度)和两条线中较短的高度决定。
解题思路:
使用双指针法,初始化两个指针 i 和 j 分别指向数组的起始和末尾。计算当前指针位置的水量,并移动较短的一侧的指针,因为移动较长的一侧的指针不会增加水量。
代码实现:
class Solution {
public:
int maxArea(vector<int>& height) {
int i = 0, j = height.size() – 1;
int max_water = 0;
while (i < j) {
int area = (j – i) * min(height[i], height[j]);
max_water = max(area, max_water);
if (height[i] < height[j]) {
i++;
} else {
j–;
}
}
return max_water;
}
};
代码解释:
复杂度分析:
- 时间复杂度:O(n),只需遍历数组一次。
- 空间复杂度:O(1),只使用了常数个额外空间。
示例验证:
- 示例 1:输入 [1,8,6,2,5,4,8,3,7],输出 49。
- 示例 2:输入 [1,1],输出 1。



