跳到主要内容

11. 盛最多水的容器

题解

如果选择的左边界为 left, 右边界为 right

容易得知,盛水的容量计算方式为 (right-left)*min(height[left],height[right]); 可见是由两个因素控制的。

容易想到暴力解法:遍历每一个数,找到最大值:

for()
for()
ans = max(ans,xx)

可以使用相向双指针避免不必要的计算,O(n)时间内找到最大值。

初始状态下 left=0, right=n-1。

  • 如果两者高度相等,随便移动哪个指针都行
  • 如果高度不等,就移动高度低的那方,因为移动后 right-left 减小,如果想找到更大的解,就得遇到更高的。
2 2 4 2