[LeetCode]11盛水最多的容器

如图所示,假设左边小于右边

image-20201218155217143

通过如下分析,双指针每次只需要移动较小那边即可,因为只有移动较小那边才有比初始的容量大的可能

image-20201218155320756

代码如下:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int i = 0, j = height.size() - 1;
        int res = 0;

        while(i < j)
        {
            res = max(res, (j - i) * min(height[i], height[j]));
            //为了追求最大的,移动稍高那边最多还是(j - i - 1)* min(height[i], height[j])
            //移动稍低的那边有可能比之前的大
            if(height[i] > height[j])  j --;
            else if(height[i] <= height[j]) i ++;
        }
        return res;
    }
};
posted @ 2020-12-18 15:55  herrhu  阅读(76)  评论(0)    收藏  举报