Leetcode Problem11

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;
}

猜你喜欢

转载自blog.csdn.net/vandance/article/details/81515567