11 盛最多水的容器

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

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

说明:你不能倾斜容器。

示例 1:

|350

输入:[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

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

我的题解

题解:双指针

左右两面开弓,不断向中间收紧,因为向中间,水池底边长度减少,所以必须原来两个墙壁中低的那个要比之前高才有可能蓄的水更多(因为需水量由两个墙壁中较低的那个决定)

所以不断中间方向移动较矮的那个墙,判断当两个墙都不低于原来的时候才有可能蓄水更多,进行判断。持续这个过程直到两个墙相遇。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left_idx=0, right_idx=height.size()-1;
        int max_val=0, max_left=0, max_right=0;
        while(left_idx!=right_idx){
            if(height[left_idx]>=max_left && height[right_idx]>=max_right){
                max_val = max(max_val,(right_idx-left_idx)*min(height[left_idx],height[right_idx]));
                max_left = height[left_idx];
                max_right = height[right_idx];
            }
            height[left_idx]<height[right_idx]?left_idx++:right_idx--;
        }
        return max_val;
    }
};

完成时间

2024-02-14:用时: 13 m 45 s

题目链接

https://leetcode.cn/problems/container-with-most-water/description/?envType=study-plan-v2&envId=top-100-liked

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注