11.盛最多水的容器

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

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

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

说明:你不能倾斜容器。

思路:
找出其中两条线,确定使用双指针,怎么实现双指针?
我们知道返回结果不可能为负数,故初始化一个ans来存储最后得到的答案,ans需不断更新;
此题就和求面积似的,最终结果为底×高的最大值,但不同的是,我们的高需要取较短的那一边,试想一下,两侧不等高的柱子装水,水最终的高度为较短的边的值,题目已明确不考虑倾斜,所以我们只需要不断更新较短的那一边,直到遍历完所有高。

代码实现:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int ans = 0;
        int left = 0, right = height.size() - 1;
        while (left < right) {
            ans = max(ans, (right - left) * min(height[left], height[right]));
            if (height[left] < height[right])
                left++;
            else
                right--;
        }
        return ans;
    }
};

时间复杂度:O(n)
空间复杂度:O(1)

posted @ 2026-03-06 21:38  Cloud00  阅读(3)  评论(0)    收藏  举报