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.
题目的意思刚开始没看懂,以为是相邻俩板的最大容积。结果写代码发现不是。所以在没看懂题目的前提下,是毫无意义的!
//一个高度数组,即隔板的高度,求数组中任意两隔板间盛水的最大量。隔板间的距离与较低隔板的高度乘积即为盛水的容量(短板效应)
首先最简单的思路,大家都会想到。max_area = min(height(i,j))*(i-j); 时间复杂度O(n)。
后面发现此题为俩值问题,夹逼原则,用俩索引依次推进。
int maxArea(vector<int> &height)
{
if (height.size() < 2)
{
return 0;
}
int left = 0;
int right = height.size()-1;
int height_val;
int max_val = 0;
int container = 0;
while(left < right)
{
height_val = min(height[left],height[right]);//最小高度
container = height_val*(right-left);//容积
if (container > max_val)//求最大
{
max_val = container;
}
if (height[left] < height[right])//俩边夹逼
{
left ++;
}
else
{
right--;
}
}
return max_val;
}