11. 盛最多水的容器
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
今天是2025年3月17日星期一
这个只要读懂了就很好理解,首先定义两个指针作为边界,因为装雨水的话就像木桶效应一样,关键是看短的那一条,能装下的就是两个边界之间的距离乘以两个边界中的最小值,接下来就是一个移动指针的思考,因为主要是看短边,所以移动长边事没意义的,因此选择移动短边并重新计算对应的雨水,迭代的过程不断更新ans取最大值,最后当两个指针相遇时结束。
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;}
};