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.
Subscribe to see which companies asked this question
/**********************************************
*@time 2016/09/09 10:36
*@place Ctrip.15#.9f
*@author dzq
**********************************************/
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
int maxArea(vector<int>& height)
{
int lift=0;
int right=height.size()-1;
int cap=min(height[lift],height[right])*(right-lift);
while(lift<right)
{
int water=min(height[lift],height[right])*(right-lift);
if(cap<water) cap=water;
//比原来容器更大的情况可能只有一种:
//在lift和right中有一个比=min(height[lift],height[right])更大的高度
if(height[lift]<height[right])
{
lift++;
continue;
}
else
{
right--;
continue;
}
}
cout<<cap<<endl;
return cap;
}
};
int main()
{
Solution solution;
vector<int> nums;
nums.push_back(1);
nums.push_back(1);
solution.maxArea(nums);
return 0;
}