题目11:
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.
/*
假设i,j是我们找到的具有最大面积的线段,则(j-i)*min(height[i],height[j])最大。
我们知道i左边的线段肯定都小于i,j右边的线段都小于j,否则其不是最优。
从两边向中间靠拢,left = 0, right = heightSize - 1, 每次向中间移动一个位置,计算left和right线段组成图形的面积。
过程中,记录最大的面积值。
每次移动时left++ or right--,直到left==right。每次移动的决策是当height[left] < height[right]时,
移动left,left++,尽量保证留下线段长的。
*/
int maxArea(int* height, int heightSize)
{
int max_area = 0;
int left = 0;
int right = heightSize - 1;
int temp_area = 0;
while (left < right)
{
temp_area = (right - left) * ((height[left] > height[right] ? height[right] : height[left]));
if (temp_area > max_area)
{
max_area = temp_area;
}
height[left] > height[right] ? right-- : left++;
}
return max_area;
}