题目描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
样例
解决思路
从左往右遍历数组,找到每一个桶,并计算出每个桶所能装的水。
解决要点
- 桶左侧的特征:假设i位置是桶的左侧,那么它的值一定比i+1位置的值大,也就是比i+1位置高。
- 桶右侧的特征:如果右侧的柱子回避左侧高,那么一定是这个第一个高的位置作为它的桶,理由很简单,因为那样就能接最多的水了,之后再高,其值不变。如果不存在比左侧高的柱子,那么一定是那些短柱中的最大值的那根,唯有这样,才能接最多的水。
- 计算桶能装的水:桶左右两侧最小值去乘以宽再减去中间柱子的高度(要求高度不大于两侧最小值),如果比桶两侧最小值还高,那么减去桶两侧的最小值,而不是那个原本的高度。