接雨水
题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6
来源:https://leetcode-cn.com/problems/trapping-rain-water/
法一:自己的代码
思路:遍历第二个至倒数第一个,每次求出要遍历元素的左右两边的最大值,再取最小值,累积求和
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Solution: def trap(self, height) -> int: all_water, i = 0, 1 while i < len(height)-1: every_water = ( min(max(height[:i]),max(height[i+1:]))) - height[i] if every_water > 0: all_water = all_water + every_water print( i , all_water) i = i+1 return all_water # all_water, i = 0, 1 # while i < len(height) - 1: # l = max(height[:i]) # r = max(height[i+1:]) # if l > height[i]: # if r > height[i]: # every_water = min(r, l) - height[i] # all_water = every_water + all_water # i = i+1 # return all_water if __name__ == '__main__': duixiang = Solution() ww = duixiang.trap([0,1,0,2,1,0,1,3,2,1,2,1]) print('结果是:', ww)