LeetCode 42. 接雨水
阿新 • • 發佈:2018-12-12
給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。
上面是由陣列 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。 感謝 Marcos 貢獻此圖。
示例:
輸入: [0,1,0,2,1,0,1,3,2,1,2,1]
輸出: 6
演算法
用陣列 value 記錄比 value[0] 低的部分。從左向右遍歷,若當前點 height[i] 不低於 value[0] ,計算 value 中所有數值變為 value[0] 所帶來的雨水量,重置 value 為 [height[i]] ;若 height[i]
程式碼
def fun(height): """ :type height: List[int] :rtype: int """ def back(s): if len(s) <= 2: return 0 value = [] ans = 0 for i, key in enumerate(s): if len(value) > 0 and key >= value[0]: ans += len(value) * value[0] - sum(value) value = [key] else: value.append(key) value.reverse() return ans + back(value) return back(height)