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 and n is at least 2.
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
Example:
Input: [1,8,6,2,5,4,8,3,7]
Output: 49
思路:
使用索引技术来解决这个问题:左右双索引技术;并且实时更新 索引;
code:
class Solution {
public:
int maxArea(vector<int>& height)
{
int n=height.size();
assert(n>=2);
int left=0;
int right=n-1;
int res=0;
//int i=1;用来调试的时候看输出的;
while(left<=right)//如何更新 是一个难点;
{
int temp=(right-left)*min(height[left],height[right]);//宽*高;
res=max(res,temp);
//cout<<"第"<<i<<"次的容积是从:"<<left+1<<"--"<<right+1<<":"<<res<<endl;
if(height[left]<=height[right])
left++;
else
right--;
//i++;
// left++;
// right--;
}
return res;
}
};