leetcode11. 盛最多水的容器

64 阅读1分钟

由于n为1e5,说明要用O(n)或O(nlogn)做法,这里用双指针。 取两边垂线,较短的一根往中间移动。

较难的部分为证明

反证法:如果较长的一根往中间移动,那么此时中间的部分一定小于此时的面积。因为较长的一根内的垂线与较短的一根的面积高度是用较短的高度来算,所以当长方形长度减少,高度不变,面积一定减小,所以不符合条件。

/**
 * @param {number[]} height
 * @return {number}
 */

var maxArea = function(height) {
    function area(i, j) {
        return Math.min(Math.min(height[i], height[j]) * (j - i));
    }
    let res = 0;
    let n = height.length;
    let i = 0, j = n - 1;
    while (i < j) {
        res = Math.max(area(i, j), res);
        if (height[i] < height[j]) i ++;
        else j --;
    }

    return res;
};