问题:给定一个由非负整数组成的数组,数组元素代表柱体高度,求该数组所代表的这些柱体能容纳的水的体积
示例:
输入:[0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解决思路:遍历数组,使用变量保存当前最大值和位置。如果遍历到的元素不小于该值,(并且且如果两者位置间隔超过1,则计算两者之间可容纳的水的体积),则需要将当前最大值和位置替换掉;如果小于该值,则用另一变量保存需要去除的水底的体积
Python代码:
class Solution(object): def trap(self, height): """ :type height: List[int] :rtype: int """ self.area = 0 length = len(height) l_index = self.cal_lr(0,length,1,height) self.cal_lr(length-1,l_index-1,-1,height) return self.area def cal_lr(self,s,e,interval,height): m_index,m_height,drown = s,0,0 for i in range(s,e,interval): if height[i] >= m_height: if abs(i-m_index) > 1: self.area += (abs(i-m_index)-1)*m_height-drown drown = 0 m_index = i m_height = height[i] else: drown += height[i] return m_index