接雨水
题目来源
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200121162219394.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUzNDMxNw==,size_16,color_FFFFFF,t_70)
解题思路
- 雨水的位置:左右侧比其高(核心条件)
- 雨水的容量:左右侧相对较低的一侧(木桶理论)
import pygal
from IPython.display import HTML
data = [0,1,0,2,1,0,1,3,2,1,2,1]
nums = len(data)
rain = []
limit = 0
for num in range(nums):
rain.append(0)
for i in range(1,nums-1):
if i < limit:
continue
if data[i] < data[i-1]:
right_index = 0
left = data[i-1]
right = data[i]
j = i + 1
while j != nums:
if data[j] > right:
right = data[j]
right_index = j
if data[j] >= left:
break
j += 1
min_column = min(left, right)
if right != data[i]:
limit = j
if right == min_column:
limit = right_index
for k in range(i, right_index):
rain[k] = min_column - data[k]
else:
continue
line_chart = pygal.StackedBar()
line_chart.title = "Let's play a game: Trapping rain water."
line_chart.x_labels = map(str,range(1,len(data)+1))
line_chart.add('Columns', data)
line_chart.add('Rain',rain)
HTML(line_chart.render().decode())
jupyter notebook的运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200121162902534.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUzNDMxNw==,size_16,color_FFFFFF,t_70)