標籤:
題目來源
https://leetcode.com/problems/trapping-rain-water/
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.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.
題意分析
Input: the height of the bars as list
Output: the volumn of the water the bars can save
Conditions:注意到因為bar的高度不一樣,所以中間的bar可以容納一定量的水,題意就是求容納的水的大小
題目思路
注意到每一個bar所能容納的水的量,就是其左右最高的bar中的較小值減去該bar的高度,所以先建立一個leftMostHigh的list記錄每一個bar之前的最高bar值,然後從後往前遍曆,一邊更新右邊最高的bar值,同時計算每一個bar所能容納的水量
AC代碼(Python)
1 _author_ = "YE" 2 # -*- coding:utf-8 -*- 3 4 class Solution(object): 5 def trap(self, height): 6 """ 7 :type height: List[int] 8 :rtype: int 9 """10 l = len(height)11 leftMostHigh = [0 for i in range(len(height))]12 leftmax = 013 for i in range(l):14 leftMostHigh[i] = leftmax15 if height[i] > leftmax:16 leftmax = height[i]17 18 rightmax = 019 sum = 020 for i in reversed(range(l)):21 if min(rightmax, leftMostHigh[i]) > height[i]:22 sum = sum + min(rightmax, leftMostHigh[i]) - height[i]23 if height[i] > rightmax:24 rightmax = height[i]25 26 return sum27 28 29 height = [0,1,0,2,1,0,1,3,2,1,2,1]30 s = Solution()31 print(s.trap(height))
[LeetCode]題解(python):042-Trapping Rain Water