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.
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
Example:
Input: [1,8,6,2,5,4,8,3,7] Output: 49
代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int l=0;
int r=height.size()-1;
int ans=0;
while(l!=r){
if(height[l]>=height[r]){
ans=(((r-l)*height[r])>ans)?((r-l)*height[r]):ans;
r--;
}
else{
ans=(((r-l)*height[l])>ans)?((r-l)*height[l]):ans;
l++;
}
}
return ans;
}
};
总结:
这题可以暴力破解,但估计会超时。
采用的是两边缩进的方法。初始时,在两边设置指针。然后指针不断内缩,算出容量,取最大值,直到两指针合并。
因为盛水的容量受限于较短的那根木板,所以指针内缩时,是较短的那根木板的指针进行内缩。