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