题解 | #接雨水问题#
接雨水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
stack=[]
res = 0
for i,num in enumerate(height):
while stack and height[stack[-1]] < num:
out=stack.pop()
if len(stack)==0:
break
# 取当前高度与栈顶高度的最小值 减去 刚才出栈的元素的高度,这才是边界的高度
bounded_height= min(height[stack[-1]], num)-height[out]
res += bounded_height*(i-stack[-1]-1)
stack.append(i)
return(res)
#通过单调栈,把小于栈顶的pop出去,然后用两个边界的蓄水量减去pop出去的值就是凹槽的蓄水量