给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
今天分享一篇c++的代码
这道题是很经典的水桶问题,一个水桶可以装多少水是由最短的一块木板决定的
所以这里我们发现,当我们确定了容器之后,我们在移动长板这个容器的可以装下的水是不会变多的,只有移动短板的时候,容器可以装下的水才有可能变多,所以我们只需要在用一个指针确定好短板和长板的位置之后,我们在设置一个变量来记录容器可以装下的水的体积,通过移动指向短板的指针去遍历,然后不断更新这个变量,这样我们只需遍历数组就可以找到可以容纳最多水的容器了。
class Solution {
public:
int maxArea(vector<int>& height) {
int l = 0, r = height.size() - 1;
int ans = 0;
while (l < r) {
int area = min(height[l], height[r]) * (r - l);
ans = max(ans, area);
if (height[l] <= height[r]) {
++l;
}
else {
--r;
}
}
return ans;
}
};