题目:
Container With Most Water
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.
参考这里。
class Solution {
public:
int maxArea(vector<int>& height) {
int size=height.size();
if(size<=1)
return -1;
if(size==2)
return min(height[0],height[1]);
int capability = 0;
size_t left = 0, right = height.size() - 1;
while (left < right)
{
int water = min(height[left], height[right]) * (right - left);
if (water > capability)
capability = water;
//从小的那一端开始移动
//由于长度缩小,所以高度要增加。故每次移动,都要移动到比原来值大的数,才有意义
if (height[left] < height[right])
{
int mark=height[left] ;
++left;
while(left < right && height[left]<=mark)
++left;
}
else
{
int mark=height[right] ;
--right;
while(left < right && height[right]<=mark)
--right;
}
}
return capability;
}
};