【问题描述】
给定n个非负整数表示每个宽度为1的立柱,立柱区域表示为列表[0,1,1,2,2,2,2,3,2,2,2,1,1],其中黑色立柱区域表示为列表[0,1,0,2,1,0,1,3,2,1,2,1],计算蓝色部分的容量大小
【输入形式】
输入一个数值列表,列表中的元素表示当前列表序号位置的立柱高度
【输出形式】
输出蓝色部分的面积和,具体是一个整数数据
【样例输入】[0,1,0,2,1,0,1,3,2,1,2,1]
【样例输出】容量面积为6
【样例说明】如何有规律的推导蓝色区域的产生是解题关键
【评分标准】
def trap(height):
if not height:
return 0
left, right = 0, len(height) - 1
left_max, right_max = height[left], height[right]
water_area = 0
while left < right:
if height[left] < height[right]:
if height[left] >= left_max:
left_max = height[left]
else:
water_area += left_max - height[left]
left += 1
else:
if height[right] >= right_max:
right_max = height[right]
else:
water_area += right_max - height[right]
right -= 1
return water_area
height =eval(input())
print("容量面积为{}".format( trap(height)))