11. Container With Most Water

25 年 10 月 3 日 星期五
320 字
2 分钟
Screenshot 2025-10-03 at 4.21.07 pm

这道题和接雨水不一样,不能用前缀和,后缀和来做。

核心思路:两条高中,短的那条决定了长方形的高度,证明如果移动长的那条,那么中间的面积只会缩小:宽短了并且高度不会增加

js
/**
 * @param {number[]} height
 * @return {number}
 */

// 一句话思路:S(i,j)=min(h[i],h[j])×(j−i)
// 在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 底边宽度 −1​ 变短:
// 若向内 移动短板 ,水槽的短板 min(h[i],h[j]) 可能变大,因此下个水槽的面积 可能增大 。
// 若向内 移动长板 ,水槽的短板 min(h[i],h[j])​ 不变或变小,因此下个水槽的面积 一定变小 。
// 初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。
var maxArea = function (height) {
  let i = 0,
    j = height.length - 1,
    area = 0
  while (i < j) {
    // i 是短板
    if (height[i] < height[j]) {
      area = Math.max(height[i] * (j - i), area)
      i++
    }
    // 一样长或者j是短板
    // 一样长的话,选哪个都可以
    else {
      area = Math.max(height[j] * (j - i), area)
      j--
    }
  }
  return area
}

文章标题:11. Container With Most Water

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/11_container_with_most_water[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。