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.
maxArea=length*heightMin,由于length单调递减,故寻找下一个maxArea需保证下一个heightMin必须增加:
1、
int maxArea(vector<int> &height) {
if(height.size()<=1) return 0;
int low=0;
int high=height.size()-1;
int result=0;
int temp;
while(low<high)
{
if(height.at(high)>=height.at(low))
{
temp=(high-low)*height.at(low);
low++;
}
else
{
temp=(high-low)*height.at(high);
high--;
}
if(temp>result)
result=temp;
}
return result;
}
2、
int maxArea(vector<int> &height) {
if(height.size()<=1) return 0;
int low=0;
int high=height.size()-1;
int result=0;
int temp;
int indexMin=0;
while(low<high)
{
while(height.at(low)<=indexMin&&low<high)
{
low++;
}
while(height.at(high)<=indexMin&&low<high)
{
high--;
}
indexMin=height.at(low)>=height.at(high)?height.at(high):height.at(low);
temp=(high-low)*indexMin;
if(temp>result)
result=temp;
}
return result;
}