问题描述:
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.
其实就是求 找出两条垂线来,与x轴构成的容器能盛更多的水。算法:
设置两个两个指针i(只能向后移动) j(只能向前移动)(不是真正意义的指针),初始的时候 i 指向第一个和 j 指向最后一个,求这两个指针和x轴构成的面积,然后判断 两个指针所值得高度的大小,小的那个指针移动一个单位,大的不动,如果两个指针所指的高度相等,那么同时移动,直到 i==j 或者 i>j 循环结束
时间复杂度
O(n)
代码实现: int maxArea(vector<int>& height) {
int i=0;
int j=height.size()-1;
int value=0;
int height_max=0;
while(i<=j)
{
value=(j-i)*min(height[i],height[j]);
if(value>height_max)
height_max=value;
if(height[i]<height[j])
i++;
else if(height[i]>height[j])
j--;
else
{
i++;
j--;
}
}
return height_max;
}
int maxArea(vector<int>& height) {
int i=0;
int j=height.size()-1;
int value=0;
int height_max=0;
while(i<=j)
{
value=(j-i)*min(height[i],height[j]);
if(value>height_max)
height_max=value;
if(height[i]<height[j])
i++;
else if(height[i]>height[j])
j--;
else
{
i++;
j--;
}
}
return height_max;
}