Water collected between towers

后端 未结 26 1107
无人共我
无人共我 2020-12-22 16:51

I recently came across an interview question asked by Amazon and I am not able to find an optimized algorithm to solve this question:

You are given an input array wh

26条回答
  •  旧巷少年郎
    2020-12-22 17:31

    /**
     * @param {number[]} height
     * @return {number}
     */
    var trap = function(height) {
        let maxLeftArray = [], maxRightArray = [];
        let maxLeft = 0, maxRight = 0;
        const ln = height.length;
        let trappedWater = 0;
        for(let i = 0;i < height.length; i ++) {
            maxLeftArray[i] = Math.max(height[i], maxLeft);
            maxLeft = maxLeftArray[i];
            maxRightArray[ln - i - 1] = Math.max(height[ln - i - 1], maxRight);
            maxRight = maxRightArray[ln - i - 1];
        }
        for(let i = 0;i < height.length; i ++) {
            trappedWater += Math.min(maxLeftArray[i], maxRightArray[i]) - height[i];
        }
        return trappedWater;
    };
    
    var arr = [5,3,7,2,6,4,5,9,1,2];
    console.log(trap(arr));

    You could read the detailed explanation in my blogpost: trapping-rain-water

提交回复
热议问题