主要方法:雙指標 + 正反遍歷
解釋說明:
1. 正向遍歷:先確定池子左牆初始化為第乙個bar,從第 2 個 bar 開始遍歷右牆,同時記錄中間的 bar 高度和,當右牆大於等於左牆的時候就有第一灘積水了,[左右牆距離 * 左牆高度 - 中間 bar 和] 就是這灘積水的體積,同時將右牆認定為下乙個左牆,同時重新記錄bar高度和。
2. 反向遍歷:和正向遍歷一樣,先確定池子右牆初始化最後乙個 bar,從後往前遍歷左牆,條件限定於大於右牆,(等於的情況表示池子左右高度相同,記錄一次就可以了)
**示例:
class solution:
def trap(self, height: list[int]) -> int:
size = len(height)
# 確定池子左牆,找大於等於左牆的右牆,並記錄中間bar的累計和
ans = left = block = 0
for right in range(1, size):
if height[right] >= height[left]:
ans += (right - left - 1) * height[left] - block
left, block = right, 0
else:
block += height[right]
# 確定池子右牆,找大於右牆的左牆,並記錄中間bar的累計和
right, block = size - 1, 0
for left in range(size - 2, -1, -1):
if height[left] > height[right]:
ans += (right - left - 1) * height[right] - block
right,block = left, 0
else:
block += height[left]
return ans
Leetcode42 接雨水 雙指標法
本題是這樣的 42.接雨水 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。題目給出的一眼就能了然題目要問的是什麼。很明顯,某一列能裝多少水,取決於該列左側和右側的高度的最小值。最無腦的做法就是,對每一列求其左右的最大值,也就是用額外的兩個o n 大...
LeetCode 42 接雨水 困難
給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,2,1,0,1...
(LeetCode 42)接雨水 思維題
42.接雨水 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,...