Skip to content
On this page

11. 盛最多水的容器

原题链接:LeetCode 11. 盛最多水的容器

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

示例 1:

输入:[1,8,6,2,5,4,8,3,7] **输出:**49 **解释:**图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

**输入:**height = [1,1] **输出:**1

提示:

- `n == height.length`

2 <= n <= 105
0 <= height[i] <= 104

难度: Medium


题解代码

javascript
/**
 * @param {number[]} height
 * @return {number}
 */
// 暴力算法
// const maxArea = height => {
//     let max = 0
//     for (let i = 0; i < height.length; i++) {
//         for (let j = 0; j < height.length; j++) {
//             const area = Math.min(height[i], height[j]) * Math.abs(i - j)
//             if (area > max) {
//                 max = area
//             }
//         }
//     }
//     return max
// }
// 左右双指针

const maxArea = height => {
    let max = 0
    let left = 0
    let right = height.length - 1
    while (left < right) {
        const area = Math.min(height[left], height[right]) * (right - left)
        if (area > max) {
            max = area
        }
        if (height[left] >= height[right]) {
            right--
        } else {
            left++
        }
    }
    return max
}

技术文档集合