Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
class Solution {
public:
int maxArea(vector<int>& height) {
int low = 0,high = height.size() - 1,max = 0;
while(high > low){
int cur = (high - low) * (height[high] > height[low] ? height[low] : height[high]);
if(cur > max){
max = cur;
}
if(height[high] > height[low]){
low ++;
}
else{
high --;
}
}
return max;
}
};
由于最终答案宽度一定小于等于最大宽度(这显然是句废话),因此从最大宽度开始计算其容量,然后再逐渐减少其宽度。
为了不枚举出所有的情况,就需要采取一定的策略,因为我们需要找出最大的容量,因此就可以去掉那些一定比现在的结果要小的情况。
所以如果我们将较高的那一条线往内部移动,那么宽度减少了却不能带来高度的提升,因此选择移动较短的线,这样就有可以剔除一部分情况,减少时间复杂度。