BM94 接雨水问题
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9
提示:
n == height.length
0 <= n <= 3 * 104
0 <= height[i] <= 105
解题思路:
双指针
Python代码:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# max water
# @param arr int整型一维数组 the array
# @return long长整型
#
class Solution:
def maxWater(self , arr: List[int]) -> int:
# write code here
i, j = 0, len(arr) - 1
max_height_i, max_height_j = 0, 0
res = 0
while i < j:
max_height_i = max(max_height_i, arr[i])
max_height_j = max(max_height_j, arr[j])
if arr[i] < arr[j]:
res += max_height_i - arr[i]
i += 1
else:
res += max_height_j - arr[j]
j -= 1
return res