1. 程式人生 > >【python/Hard/42】Trapping Rain Water

【python/Hard/42】Trapping Rain Water

題目

這裡寫圖片描述

實現思路

模擬法。

開闢一個數組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