Container With Most Water
问题是给出一个数组如[1,8,6,2,5,4,8,3,7],代表坐标(i,a i)处的点,找到两条线,它们与x轴一起形成一个容器,得到最大容量。
这个问题很简单的想法就是便利一遍数组,得到最大容量,不过这样的话时间复杂度将达到O(n^2)。
另外一种想法是设置指向数组头尾两个指针left和right,比较这两个指针指向的数的大小,若left指向的数比较小,则left右移,若right较小,则right左移。这是由于木桶效应造成的,容量只由较短的一边决定,所以只有移动较短的那根才有可能取到较大的容量。每次移动都与当前最大容量进行比较,最后当头尾指针指向同个位置时结束。
int maxArea(vector<int>& height)
{
int len=height.size(),max=0;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
int w=height[i]>height[j]?height[j]:height[i];
if(max<(j-i)*w)
max=(j-i)*w;
}
}
return max;
}