
LeetCode 11 盛最多水的容器双指针经典题移动哪一侧不靠猜而是靠木桶原理。 盛最多水的容器数组每个值表示柱子高度选两根柱子围成的容器能装多少水。找最大容量。[1,8,6,2,5,4,8,3,7] → 49推导链暴力枚举所有柱子对 → O(n²)。从两端出发宽度最大。移哪侧高度由短板决定——移高边新短板≤旧短板面积必降移矮边新柱子可能更高面积可能反超。每次移矮边O(n)。两根柱子 left、right容量 (right-left) × min(height[left], height[right])。指针从两端出发每次移动较矮的那一侧。为什么因为如果移动较高的那一侧宽度减小了新的短板不会比原来的短板更高——面积一定变小。移动较矮侧才有可能反超。publicintmaxArea(int[]height){intleft0,rightheight.length-1;intmax0;while(leftright){intarea(right-left)*Math.min(height[left],height[right]);maxMath.max(max,area);if(height[left]height[right])left;elseright--;}returnmax;}O(n) 时间O(1) 空间。Why 移矮不移高面试一定会追问。关键论证——宽度每次减 1高度由短板决定。移高边新短板 ≤ 旧短板面积必降。移矮边新柱子可能更高面积可能涨。所以只移矮边有希望找到更大面积。两根一样高时移哪边都行。面试必问为什么移矮边——宽度每次减1面积只能靠增加短板高度来弥补。移高边高度只降不升。相等时移哪边都行。这道题你踩过什么坑或者你用别的语言实现过吗评论区聊聊回头复习也方便翻。