您的位置:首页 > 大数据 > 人工智能

[leetcode Q9] Container With Most Water

2016-02-23 22:33 357 查看
题意是有个高度数组,就相当于隔板的高度,求数组中任意两隔板间盛水的最大量。隔板间的距离与较低隔板的高度乘积即为盛水的容量。

类似于2Sum的思想,两边设一个指针,然后计算area,如果height[i] <= height[j],那么i++,因为在这里height[i]是瓶颈,j往里移只会减少面积,不会再增加area。

这是一个贪心的策略,每次取两边围栏最矮的一个推进,希望获取更多的水。

[code]int maxArea(vector<int> &height) 
{
    int capability = 0;
    size_t left = 0, right = height.size() - 1;
    while (left < right)
    {
        const int water = min(height[left], height[right]) * (right - left);
        if (water > capability) capability = water;
        if (height[left] < height[right])
        {
            ++left;
        }
        else
        {
            --right;
        }
    }
    return capability;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: