要求:找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路:双指针指向首尾,每次移动高度小的那个指针
证明:开始时h1<h2,两指针间距t,面积h1t。若移动右指针,设移到h3。首先新间距t1<t。若h3>=h1,新面积为h1t1<h1t;若h3<h1,新面积h3t1<h1*t。也就是说不管右指针移到哪面积只会变小所以没意义了,只能移动左指针,即移动小的
class Solution {
public:
int maxArea(vector<int>& height) {
int left=0,right=height.size()-1;
int maxs=0;
while(left<right){
maxs=max(maxs,(right-left)*min(height[right],height[left]));
if(height[left]<height[right])++left;
else --right;
}
return maxs;
}
};
这篇博客探讨了一个算法问题,如何找到两条线段,使它们与x轴形成的容器能容纳最多的水。作者提出了使用双指针策略,从数组的两端开始,每次移动高度较小的指针,以确保每次增加的容器面积不会小于当前面积。这个方法被证明是最优的,因为移动高度较大的指针只会减少容器的水量。博客通过代码实现展示了这一算法,适用于解决类似的最大化面积的问题。
1753

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



