leetcode-Container With Most Water

题目链接:https://leetcode.com/problems/container-with-most-water/

分析:两指针+短板原理

用两个指针分别指向最左边和最右边,根据短板原理,能够存储最大容量的水其实是由最短的那块短板来决定的,因此当height[l] < height[r]时,++l,短板为height[l]; 否则, --r。

另外:如果想要获得更大的面积,当两指针分别往右和往左移动时候,其实底部的宽度是减小的,也即(j-i)是减少的,为了增大面积,必须height[l],height[r]中较小的指针,才有可能增加高度,否则根据短板原理,面积必然是减小的。

实现代码如下:

class Solution
{
public:
    int maxArea(vector<int>& height)
    {
        int n = height.size();
        int l = 0;
        int r = n - 1;
        int ans = 0;

        while(l < r)
        {
            int area = min(height[l], height[r]) * (r - l);
            ans = ans > area ? ans : area;
            if(height[l] < height[r])
            {
                ++l;
            }
            else
            {
                --r;
            }
        }
        return ans;
    }
};

 

posted @ 2016-05-14 15:37  Shirley_ICT  阅读(149)  评论(0编辑  收藏  举报