给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
一、双指针
class Solution:
def trap(self, height: List[int]) -> int:
if len(height) < 3:
return 0
left = 0
right = len(height) - 1
leftmax = height[left]
rightmax = height[right]
res = 0
while left < right:
if leftmax < rightmax:
res += leftmax - height[left]
left += 1
leftmax = max(height[left], leftmax)
else:
res += rightmax - height[right]
right -= 1
rightmax = max(height[right], leftmax)
return res