双指针与滑动窗口中等1 种解法

#11盛最多水的容器

选择两条竖线,使它们与横轴围成的容器面积最大。

#数组#双指针#贪心

解题主线

01

面积由较短边决定;移动较长边只会缩小宽度且不能提高高度上限。

02

因此每轮计算面积后移动较短边,不会遗漏可能更优的答案。

解法 1首尾双指针

从最大宽度开始,记录当前面积并向内移动较短的一侧。

时间复杂度

O(n)

空间复杂度

O(1)

11. 盛最多水的容器 · 首尾双指针
final class Solution {
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int answer = 0;
        while (left < right) {
            int area = Math.min(height[left], height[right]) * (right - left);
            answer = Math.max(answer, area);
            if (height[left] <= height[right]) left++;
            else right--;
        }
        return answer;
    }
}

从最大宽度开始,记录当前面积并向内移动较短的一侧。

边界与易错点

  • 宽度是下标差,不是元素个数。
  • 输入规模扩大时面积乘法可能需要 long;本题约束内 int 足够。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

medium/Q011_mostWaterContainer.java