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.
题意就是说给出一组数组表示高度,求出这个数组中2个数所夹得高度所能盛的最多水量,其实就是两个数比较小的一个乘以两个数的距离在整个数组中最大的那个值。具体算法是:从边界开始算,先算出整个数组表示的容器能盛的最大水量 然后比较左边界和右边界,哪一边的小就往数组里缩进。这里为什么是小的缩进而不是大的缩进有原因:
class Solution {
public:
int maxArea(vector<int> &height) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int len = height.size();
if (len == 0) return 0;
if (len == 1) return height[0];
int left = 0, right = len - 1, max = 0;
while (left < right)
{
int leftHeight = height[left], rightHeight = height[right];
int tempArea = min(leftHeight, rightHeight) * (right - left);
if (tempArea > max) max = tempArea;
if (leftHeight > rightHeight) --right;
else ++left;
}
return max;
}
};