LeetCode 11. Container With Most Water

题目意思就是说有n块木板,对于第i个木板长度应该是a[i],竖直放在x坐标轴上,现在为任选两个木板,求最大能盛水的体积。

  • 两块木板能盛水的多少取决与短的木板的长度。所以不需要枚举所有可能的(i , j)(i < j)。起始 i = 1, j = n(两个位置一个向后挪动,一个向前挪动),对于一组(i, j), 如果a[i] > a[j], 那么使 j 向前挪动,才可能使总体积变大,因为无论i向后挪动,还是j向前挪动,都会使(j - i)变小, 所以要保留长度长的木板, 长度短的木板舍弃
class Solution {
public:
    int maxArea(vector<int>& height) {
        int b = 0, e = height.size() - 1;
        int mx = INT_MIN;
        while(b < e)
        {
            int t = min(height[b], height[e]);
            int area = t * (e - b);
            mx = max(mx, area);
            if(height[b] <= height[e])
                b ++;
            else
                e --;
        }
        return mx;
    }
};
posted @ 2017-03-07 19:46  aiterator  阅读(90)  评论(0编辑  收藏  举报