方法:双指针

利用首尾双指针遍历数组,当左指针的高度小于右指针时,左指针向右移动一位;否则,右指针向左移动一位。因为每次向中间移动的时候底部的长度会缩短,所以我们必须要移动较短的一侧高度,这样才有可能得到较大的容积。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
  public:
    int maxArea(vector<int>& height) {
        // 特殊情况处理
        if (height.size() < 2)
            return 0;

        int res = 0;
        int left = 0;
        int right = height.size() - 1;

        while (left < right) {
            res = max(res, min(height[left], height[right]) * (right - left));

            if (height[left] < height[right])
                left++;
            else
                right--;
        }

        return res;
    }
};