1. 问题背景与核心挑战
这道来自力扣(LeetCode)热题100的经典题目"盛最多水的容器"(Container With Most Water),表面看似简单却蕴含着巧妙的算法思维。题目要求我们在给定一组非负整数表示容器壁高度的情况下,找出两条垂直线与x轴共同构成的容器能容纳最多的水量。
在实际工程场景中,这类问题广泛存在于资源分配、系统容量规划等领域。比如云计算中的服务器负载均衡、物流仓储中的货架空间优化,甚至是金融投资中的风险收益平衡,都需要类似的极值求解思维。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 暴力解法与性能瓶颈
最直观的解法是双重循环遍历所有可能的左右边界组合:
python复制def maxArea(height):
max_area = 0
n = len(height)
for i in range(n):
for j in range(i+1, n):
current_area = min(height[i], height[j]) * (j - i)
max_area = max(max_area, current_area)
return max_area
这种解法时间复杂度为O(n²),当n较大时(比如10^5量级)会严重超时。我在实际测试中发现,当输入规模达到5万时,暴力解法在普通笔记本上需要近20秒才能完成计算。
3. 双指针解法的精妙之处
3.1 基本思路解析
双指针解法将时间复杂度优化到O(n),其核心在于:
- 初始化左右指针分别指向数组两端
- 计算当前区域面积并更新最大值
- 移动较短边的指针向中间靠拢
- 重复直到两指针相遇
python复制def maxArea(height):
left, right = 0, len(height) - 1
max_area = 0
while left < right:
current_area = min(height[left], height[right]) * (right - left)
max_area = max(max_area, current_area)
