给定一个长度为 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_双指针 的整数数组 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_算法_02 。有 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_双指针 条垂线,第 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_双指针_04 条线的两个端点是 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_算法_05LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_leetcode_06

找出其中的两条线,使得它们与 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_算法_07

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1:

LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_面积_08

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

输入:height = [1,1]
输出:1

提示:

  • LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_面积_09
  • LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_双指针_10
  • LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_每日一题_11

思路:

  • 双指针
  • 初始时,令 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_算法_12 在 数组的最左边,LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_每日一题_13
  • 面积:LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_每日一题_14
  • 当前的 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_leetcode_15 是最大的,如果要使得面积变大,只能使得 LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_算法_16 变大,也就是令 最小值变大,所以找出两者中的比较小的那个边界,向内移动,然后每次更新下 最大值: LeetCode11. 盛最多水的容器(2024秋季每日一题 7)_面积_17
class Solution {
public:
    int maxArea(vector<int>& height) {
        int l = 0, r = height.size() - 1;
        int res = -1;
        while(l < r){
            res = max(res, (r - l)*min(height[l],height[r]));
            if(height[l] < height[r]) l++;
            else r--;    
        }
        return res;
    }
};