1. 程式人生 > >Lintcode363 Trapping Rain Water solution 題解

Lintcode363 Trapping Rain Water solution 題解

答案 計算 bar 題目 blog pin ons ini where

【題目描述】

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

技術分享圖片

給定n個非負整數,表示一個高程圖,其中每個條形圖的寬度為1,計算下雨後它能捕到多少水。

技術分享圖片

【題目鏈接】

www.lintcode.com/en/problem/trapping-rain-water/

【題目解析】

此題挨個分析每個A[i]能trapped water的容量,然後將所有的A[i]的trapped water容量相加即可

其次,對於每個A[i]能trapped water的容量,取決於A[i]左右兩邊的高度(可延展)較小值與A[i]的差值,即volume[i] = [min(left[i], right[i]) - A[i]] * 1,這裏的1是寬度,如果the width of each bar is 2,那就要乘以2了”

那麽如何求A[i]的左右高度呢? 要知道,能盛多少水主要看短板。那麽對每個A[i]來說,要求一個最高的左短板,再求一個最高的右短板,這兩個直接最短的板子減去A[i]原有的值就是能成多少水了。

所以需要兩遍遍歷,一個從左到右,找最高的左短板;一個從右到左,找最高的右短板。最後記錄下盛水量的總值就是最終結果了。

【參考答案】

www.jiuzhang.com/solutions/trapping-rain-water/



Lintcode363 Trapping Rain Water solution 題解