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.
翻译
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2。
分析
木桶原理,盛多少水由最短的木板决定,所以从首尾向中间逼近,前后两者短的舍弃,找到最大的容量。
c++实现
class Solution {
public:
int maxArea(vector<int>& height) {
int tmp,res = 0;
int start = 0,end = height.size()-1;
while (end > start)
{
tmp = min(height[start],height[end])*(end-start);
res = max(res,tmp);
if (height[start] <= height[end])
start++;
else
end--;
}
return res;
}
};