【python/Hard/42】Trapping Rain Water
阿新 • • 發佈:2018-12-09
題目
實現思路
模擬法。
開闢一個數組leftMaxArr,leftMaxArr[i]為height[i]之前的最高的bar值,然後從後面開始遍歷,用rightMax來記錄從後向前遍歷遇到的最大bar值,那麼min(leftMaxArr[i], rightMax)-A[i]就是在第i個bar可以儲存的水量。例如當i=9時,此時leftMaxArr[9]=3,而rightMax=2,則儲水量為2-1=1,依次類推即可。這種方法還是很巧妙的。
時間複雜度為O(N)。
實現程式碼
class Solution:
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
length = len(height)
leftMaxArr = [0 for i in range(length)]
leftMax = 0
for i in range(length):
if height[i] > leftMax:
leftMax = height[i]
leftMaxArr[i] = leftMax
water = 0
rightMax = 0
for i in range(length-1 ,-1,-1):
if height[i] >rightMax:
rightMax = height[i]
if min(rightMax,leftMaxArr[i]) > height[i]:
water += min(rightMax,leftMaxArr[i]) - height[i]
return water