leetcode11 盛最多水的容器

82 阅读1分钟

11. 盛最多水的容器 - 力扣(LeetCode)

思路:采用双指针。 双层循环时间复杂度n方级别,采用双指针变成单层循环处理。计算的时候高度使用min的计算。

/**
 * @param {number[]} height
 * @return {number}
 */
/**
 * 思路:首先两层循环就可以解决,这样的话所有的都去进行了计算和比较
 * 单层循环的话,需要双指针,
 */
var maxArea = function (height) {
    let n = height.length
    let left = 0, right = n - 1
    let area = 0
    while (left < right) {
        // 宽度为left和right之间的距离,高为height[left], heigth[right]之间最小的
        area = Math.max((right - left) * Math.min(height[left], height[right]), area)
        // height[left], heigth[right]哪个小就往后重新找值计算,直到左右两边元素相遇
        height[left] < height[right] ? left++ : right--
    }
    return area
};
let height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
height = [1, 2]
console.log(maxArea(height))