1.问题描述
2.分析问题
如何从下面选出两个竖线,这样组合出来的容器能装的液体最多。直观考虑就是把所有的组合可能能遍历一遍,不过这样的时间复杂度就比较高,为O(n^2).仔细考虑可以发现,如果两边往中间靠拢,假如当前处在左i与右j的位置,那么如果挪动一下的话,只能是较小的一边往内缩才有机会变成最大容器(可以琢磨一下,如果大的一边还往里缩,那么下一个容器的高肯定小于等于上一个小边,而且长度变小了,必然导致容量减少)。
3.代码
int maxArea(vector<int> &height)
{
int right=height.size()-1;
int left=0;
int result=0;
while(left<right)
{
result=max(result,(right-left)*min(height[left],height[right]));
if(height[left]<height[right]) {left++;}
else {right--;}
}
return result;
}