题目:
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.
代码:
int maxArea(vector<int>& height) {
int water=0;
int i=0;
int j=height.size()-1;
while(i < j)
{
water = max(water, (j - i) * min(height[i], height[j]));
if(height[i] < height[j])
++i;
else
--j;
}
return water;
}
题解:首先的思路:两个循环穷举比较求最大值,估计会超时,没试。于是设两个指针i,j分别指向头尾,并且设置个初始最大值为i,j指向头尾所形成的容积,在i<j的大前提下。比较i,j所指向的点的高度,移动i,j。如果H(i)<H(j),则形成新的容积肯定比初始值小,所以跳过不计,如果H(i)>H(j),则让新的容积与上一次比较,右边指针同理,直至其相遇,所求即为最大值。