🧩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 · 双指针