暴力解法
class Solution:
def trap(self, height: List[int]) -> int:
res = 0
for i in range(len(height)):
max_left, max_right = 0, 0
for j in range(i, -1, -1):
max_left = max(max_left, height[j])
for k in range(i, len(height), 1):
max_right = max(max_right, height[k])
res += min(max_left, max_right) - height[i]
return res
动态规划
class Solution:
def trap(self, height: List[int]) -> int:
fn = []
for i in range(len(height)):
fn.append([0, 0])
temp_max = height[0]
max_index = 0
res = 0
for i in range(1, len(height), 1):
if height[i] > temp_max:
temp_max = height[i]
max_index = i
fn[0][0] = height[0]
fn[0][1] = temp_max
fn[-1][0] = temp_max
fn[-1][1] = height[-1]
for i in range(1, max_index, 1):
fn[i][0] = max(fn[i-1][0], height[i])
fn[i][1] = temp_max
fn[max_index][0] = temp_max
fn[max_index][1] = temp_max
for i in range(len(height)-2, max_index, -1):
fn[i][0] = temp_max
fn[i][1] = max(fn[i+1][1], height[i])
for i in range(len(height)):
res += (min(fn[i]) - height[i])
return res