和木桶效应有点像,储水量由宽度和最短的那个板决定。
储水量
现在就是去找出l,r,利用双指针遍历,l=0,r=n-1。
现在的问题是,利用什么样的策略去移动双指针呢,既然和板长有关系,就以板子长短来定
①移动长板:下一次得到的宽度会缩小,并且最短的板子只会<=当前的最短的板子,所以下一次的储水量必定<=当前储水量。
②移动短板:下一次得到的宽度会缩小,但是最短的板子有可能会>当前的最短的板子,所以下一次的储水量可能会>当前储水量。
由此得出,在移动双指针时,将短板移动,一直去更新ans的最大值即可。
class Solution {
public:
int maxArea(vector<int>& height) {
int n=height.size();
int l=0,r=n-1;
int lc=height[0];
int ans=0;
while(l<=r)
{
ans=max(ans,(r-l)*min(height[r],height[l]));
if(height[r]>height[l]) l++;
else r--;
}
return ans;
};
};