从两头开始向中间收拢,记录一个最大值。 由于初始的宽度最大,要想在收拢过程中取得更大的面积,要求收拢的边的高度高于原高度。 由于容器的高度由最短边决定,每次从短的那边开始收拢
class Solution {
public:
int maxArea(vector<int> &height) {
int Max=0;
int len = height.size();
int l=0,r=len-1;
while( l<r )
{
Max = max(Max,min(height[l],height[r])*(r-l) );
if( height[l] < height[r] )
{
int k = l+1;
while( height[k] <= height[l] )
{
k++;
}
l = k;
}
else
{
int k=r-1;
while( height[k] <= height[r] )
{
k--;
}
r = k;
}
}
return Max;
}
};