同 ID 3189,此處提供 C# 版本與更詳細思維過程。
O(N²) 超時。left, right 向中間收縮。min(h[left], h[right]) * (right-left)。
public class Solution {
public int MaxArea(int[] height) {
int left = 0, right = height.Length - 1;
int maxArea = 0;
while (left < right) {
maxArea = Math.Max(maxArea, Math.Min(height[left], height[right]) * (right - left));
if (height[left] > height[right]) right--;
else left++;
}
return maxArea;
}
}
若 height = [10,1,2,3,4,5,6,7,11],left 指向 10,right 指向 11。短板在左,移動 left++ 不會越界。反之亦然。策略保證不遺漏最優解。