接雨水問題 雙指標

2021-10-08 15:03:00 字數 1126 閱讀 3435

# 暴力法

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...