思路
容器面积由 宽度 和 短板高度 决定。最优解一定藏在不断收窄宽度的过程中。
- 初始化:
left指针在数组头部,right指针在尾部。这是最宽的可能。 - 移动策略:比较
height[left]和height[right]。- 面积受限于短板。若移动长板,宽度变小,高度不变(或变小),面积必然减小。
- 因此,必须移动短板对应的指针。这虽然牺牲了宽度,但给了我们寻找更高板子的机会,面积才有可能增大。
- 迭代:循环此过程,持续更新最大面积,直到两指针相遇。
C++ 代码实现
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0;
int right = height.size() - 1;
int maxArea = 0;
while (left < right) {
int currentArea = min(height[left], height[right]) * (right - left);
maxArea = max(maxArea, currentArea);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
};
复杂度
- 时间复杂度:
O(n),left和right指针总共只会遍历数组一次。 - 空间复杂度:
O(1),仅使用常数个变量。

