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.
我觉得这是一个非常tricky的问题,如果你不懂得数学解法的话,这道题基本做不出来(穷举法会超时)。而你知道了数学解法后,就觉得这道题很简单。
class Solution {
public:
int maxArea(vector<int>& height)
{
int n = (int)height.size();
int left = 0;
int right = n - 1;
int max_volume = 0;
while (left < right)
{
int x_ais = right - left;
int y_ais = height[left] < height[right] ? height[left] : height[right];
if (max_volume < x_ais * y_ais)
{
max_volume = x_ais * y_ais;
}
if (height[left] < height[right])
{
left++;
}else{
right--;
}
}
return max_volume;
}
};
leetcode——Container With Most Water
原文:http://my.oschina.net/u/1047616/blog/497309