给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
思路:
用到了双指针。
int maxArea(vector<int>& height) {
//两条线构成的容器,宽度越小,高度越高才有可能容纳更多水,显然,从数组两头开始遍历,不断选择更高的点
int left = 0;
int right = height.size()-1;
int maxval = 0;
while(left < right)
{
int val = min(height[left],height[right])*(right - left);
if(val > maxval)
{
maxval = val;
}
if(height[right] > height[left])
{
left++;
}
else
{
right--;
}
}
return maxval;
}