【leetcode】11. 盛最多水的容器

44 阅读1分钟

leetcode-11.png

这一题肉眼一看,直接暴力解题,但是也很显然,暴力会超时

暴力

时间复杂度O(n^2)

var maxArea = function (height) {
    let len = height.length
    let max = 0
    for (let i = 0; i < len; ++i) {
        for (let j = i; j < len; j++) {
            let tmp = Math.min(height[i], height[j]) * (j - i)
            max = Math.max(tmp, max)
        }
    }
    return max
};

优化后

时间复杂度O(n)

var maxArea = function (height) {
    let left = 0, right = height.length - 1
    let max = 0
    while (left < right) {
        let min = Math.min(height[left], height[right])
        let tmp = (right - left) * min
        max = Math.max(max, tmp)
        // 寻找到高于目前最小高度的一根柱子
        while(left < right && height[left] <= min) left++
        while(left < right && height[right] <= min) right--
    }
    return max
};