题目描述
算法
(双指针) $O(n)$
设定两个指针, 初始在两端, 计算这两个组成的容量, 然后移动值较小的那个, 所有计算结果取最大。
可以反证法证明这样可以得到最优答案。
C++ 代码
class Solution {
public:
int maxArea(vector<int>& height) {
int res = 0;
int l = 0, r = height.size() - 1;
while (l < r)
{
res = max(res, (r - l) * min(height[l], height[r]));
if (height[l] < height[r]) l++;
else r--;
}
return res;
}
};