给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
思路:定i和j为数组的头和尾,然后计算这两个位置的面积,如果比原来的面积大就更新最大面积,另外还要更新i和j,因为i和j之间还可能存在比最大面积还要大的情况(中间height值可能很大),所以我们需要再去寻找更大的面积,这时候i和j谁小就更新谁。
class Solution {
public:
int maxArea(vector<int>& height) {
int nCount = height.size();
int nMaxArea = 0;
int i=0,j=nCount-1;
while(i<j)
{
nMaxArea = max(min(height[i],height[j])*(j-i),nMaxArea);
if(height[i] > height[j])
j--;
else
i++;
}
return nMaxArea;
}
};