LeetCode 42 接雨水 雙指標

2021-10-08 08:50:02 字數 1119 閱讀 8225

主要方法:雙指標 + 正反遍歷

解釋說明:

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