贪心+双指针

常规思路:

从左向右两层遍历,找到每一个以外层循环中的点i为起点,内层循环中的点j为终点的容器面积,如果比ans大则更新ans的值,需要O(n2)

贪心:

容器的面积取决于宽和高,我们让宽尽量宽。

双指针:

从两侧向中间遍历,每次移动,宽都会-1,这时容器的最大值由于木桶效应,取决于较短边,计算出此时的面积,如果更大则更新ans


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param height int整型vector 
     * @return int整型
     */
    int maxArea(vector<int>& height) {
        // write code here
        int n = height.size();
        if(n < 2)
            return 0;
        int ans = 0;
        int l = 0;
        int r = n - 1;
        while( l < r ){
            int index = height[l] <= height[r] ? l : r;
            ans = max(ans,height[index] * (r-l));
            if(index == l)
                l++;
            else
                r--;
        }
        return ans;
        
    }
};