直方图的水量
给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。
来源:力扣(LeetCode)
链接: link.
思路
官方链接下面已经给出了提示,基本按这个提示来就可以。
因为对于当前位置来说,积水面积由左右两侧两个最大值中的较小的一个来决定,即积水面积为min(leftMax, rightMax) - height[i]。
当然为了效率,采用双指针,从两边开始,同时维护左侧最大值和最右侧最大值,具体步骤如图所示。