第一次很难想到双指针的解法,参考链接 盛最多水的容器(双指针,清晰图解)
双指针容易实现,问题是为什么双指针最后的结果能保证容器盛的水最多?
- 证明:
代码如下:
class Solution:
def maxArea(self, height: List[int]) -> int:
# 双指针解法
left, right = 0, len(height) - 1 # 题目保证了height至少有两个值
res = 0
while left < right:
if height[left] < height[right]:
res = max(res, (right - left) * height[left]) # 更新最大面积,当前面积计算公式(right - left)(底边宽度) * height[left](短板高度)
left += 1 # 可惜python不能直接left++,不然还可以更加简洁
else:
res = max(res, (right - left) *height[right])
right -= 1
return res