双指针:盛水最大容器

68 阅读1分钟

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

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

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

image.png

思路:

双指针,面积=(右指针-左指针)* 两个值的最小值,移动两个值更小的那个指针,左指针向右,右指针向左。

var maxArea = function(height) {
    let max=0
    let capacity
    // for(let i=0;i<height.length;i++){
    //     for(let j=i+1;j<height.length;j++){
    //         capacity=(j-i)*(height[i]>height[j]?height[j]:height[i])
    //         if(capacity>max){
    //             max=capacity
    //         }
    //     }
    // }
    let l = 0
    let r = height.length-1
    while(l<r){
        capacity=(r-l)*(height[l]>height[r]?height[r]:height[l])
        max=Math.max(capacity,max)
        if(height[l]<=height[r]){
            ++l;
        }
        else{
            --r;
        }
    }
    return max
};