要求:找出其中的两条线,使得它们与 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;
}
};