🧩Algo 双指针

11. 盛最多水的容器

难度:🟡 Medium | 标签:双指针、贪心 | 状态:⬜ LeetCode 链接

思路

对撞指针。容积 = min(h[l], h[r]) * (r - l)。 每次移动较低的那一边——因为移动较高的一边宽度只会减小、高度还受限于矮的,绝不会变好。

代码

class Solution {
public:
    int maxArea(vector<int>& h) {
        int l = 0, r = h.size() - 1, best = 0;
        while (l < r) {
            int area = min(h[l], h[r]) * (r - l);
            best = max(best, area);
            if (h[l] < h[r]) ++l;
            else --r;
        }
        return best;
    }
};

复杂度

  • 时间 O(n),空间 O(1)

易错 / 回顾

  • 高度相等时移哪边都行
  • 关键证明:移高的那边一定不优于移低的——这点要能讲清楚
  • 不要和「接雨水」混淆——本题只看两根柱子的高低
Related · 双指针