1. 程式人生 > 實用技巧 >LeetCode #42 Trapping Rain Water

LeetCode #42 Trapping Rain Water

題目

Trapping Rain Water


解題思路

這題自己的思路沒做出來,想法是從0開始尋找下一個與它高度相等或更高的方塊,算出兩方塊圍出來的矩形的面積,再減去其中的方塊得到這一段的雨水,然後從這個更高或相等高度的方塊開始繼續找,若找到末尾就從這個方塊的下一個位置開始重新找,直到最後。

Failed case: 4, 2, 3

其實算是對暴力破解的改進的一次嘗試,整活沒整出來...

這題有暴力破解法,動態規劃法,棧法,雙指標法,雖然是個hard,但還是很經典的,具體力扣都有,就不再贅述了。


程式碼

暴力破解

class Solution:
    def trap(self, height: List[int]) -> int:
        trapped = 0
        
        for i in range(len(height)):
            left_max, right_max = 0, 0
            for j in range(i, -1, -1):
                left_max = max(left_max, height[j])
            for j in range(i, len(height)):
                right_max = max(right_max, height[j])
            trapped += min(left_max, right_max) - height[i]
        
        return trapped

動態規劃



雙指標