leetcode| 11 盛最多水的容器

51 阅读1分钟

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

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

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

示例 1:

输入: height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
解释: 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

思路分析

  1. 双指针(对撞指针),左指针从左往右,右指针从右往左
  2. 哪边指针小就移动哪边(相同时移动任意一边都可以),直到指针相撞(遍历完所有)。不断试错更新最大值
  3. 返回最大值。

code:

        let l = 0, r = height.length - 1;
        let maxWaters = 0;
        while(l < r){
            let w = r - l;
            let h = Math.min(height[l], height[r]);
            maxWaters = Math.max(maxWaters, w * h);
            if(height[l] < height[r]){
                l++
            }else{
                r--
            }
        }
        return maxWaters;
}