从两头开始向中间收拢,记录一个最大值。 由于初始的宽度最大,要想在收拢过程中取得更大的面积,要求收拢的边的高度高于原高度。 由于容器的高度由最短边决定,每次从短的那边开始收拢
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;
}
};
本文介绍了一种解决经典容器盛水问题的高效算法。通过从两端向中间逼近的方法,不断寻找能容纳最多水的方案。该算法巧妙地利用了双指针技巧,并通过跳过不可能形成更优解的状态来优化搜索过程。
264

被折叠的 条评论
为什么被折叠?



