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

44 阅读1分钟

leetcode-11.png

双指针

分别从两边开始计算当前容量,然后每次都保留最大的容量
left和right指针分别指向头尾,来计算容量,后面只需要合理的来收缩left还有right即可

试想现在是height[left]最小,称之为minHeight,那么要增大容量,那只有两个可能,增大底或者是增大高
1.增大底,这个不可能了,因为left还有right最开始都在首尾
2.增大高,找到第一个大于称之为minHeight即可,也就是代码7、8行,一般来说7、8行只有一个会执行,如果height[left] === height[right]的情况下,那么两行代码都会执行

var maxArea = function (height) {
    let left = 0, right = height.length - 1
    let max = 0
    while (left < right) {
        let minHeight = Math.min(height[left], height[right])
        max = Math.max(max, (right - left) * minHeight)
        while (left < right && height[left] <= minHeight) left++
        while (left < right && height[right] <= minHeight) right--
    }
    return max
};