# 暴力法def rain(lis):
n = len(lis)
l_max = [0 for _ in range(n)] # 記錄每個點為中心,左邊和右邊最高的板高度
r_max = [0 for _ in range(n)]
for i in range(1, n):
l_max[i] = max(l_max[i - 1], lis[i - 1])
for j in range(n - 2, -1, -1):
r_max[j] = max(r_max[j + 1], lis[j + 1])
res = 0
for k in range(n):
tmp = min(l_max[k], r_max[k]) - lis[k] # 記錄每個點的儲水量,有可能出現負值,除去
res += tmp if tmp > 0 else 0
return res
print(rain([0,1,0,2,1,0,1,3,2,1,2,1]))
# 雙指標
def point_search(lis):
n = len(lis)
left, right = 0, n - 1
l_max, r_max = lis[0], lis[-1]
res = 0
while left <= right: # 通過最左邊和最右邊的指標不斷向中間移動,計算每個點上面的儲水量(大於等於0)
l_max = max(l_max, lis[left])
r_max = max(r_max, lis[right])
if l_max < r_max: # 取兩邊較低的高度計算
42 接雨水 雙指標
對於乙個較低的坑來說,其儲水量高度取決於左側最高柱與右側最高柱的較小高度 可以用兩個指標,分別從左右兩邊往中間逼近,左側或者右側的儲水量只取決於當前一側的高度差 if len height 0 return 0left,right 0,len height 1 left max,right max ...
397,雙指標求接雨水問題
給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 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...
LeetCode 42 接雨水 雙指標
主要方法 雙指標 正反遍歷 解釋說明 1.正向遍歷 先確定池子左牆初始化為第乙個bar,從第 2 個 bar 開始遍歷右牆,同時記錄中間的 bar 高度和,當右牆大於等於左牆的時候就有第一灘積水了,左右牆距離 左牆高度 中間 bar 和 就是這灘積水的體積,同時將右牆認定為下乙個左牆,同時重新記錄b...