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.
这个真心是看了答案才会得,暴力解法过不了时间限制。。。
因为短板决定容积,所以尝试移动短的那个。 数学证明是个反证法。不过逻辑上是如果当前不是最大,只能移动短的来获得可能最大。
class Solution {
public:
int maxArea(vector<int> &height) {
int left=0;
int right=height.size()-1;
int area=0;
while(left<right){
area=max(area,(right-left)*min(height[left],height[right]));
if(height[left]<height[right])
left++;
else
right--;
}
return area;
}
};