37 lines
673 B
Go
37 lines
673 B
Go
package top100liked
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// https://leetcode.cn/problems/trapping-rain-water/?envType=study-plan-v2&envId=top-100-liked
|
|
|
|
func trap(height []int) (ans int) {
|
|
n := len(height)
|
|
if n == 0 {
|
|
return
|
|
}
|
|
|
|
leftMax := make([]int, n)
|
|
leftMax[0] = height[0]
|
|
for i := 1; i < n; i++ {
|
|
leftMax[i] = max(leftMax[i-1], height[i])
|
|
}
|
|
|
|
rightMax := make([]int, n)
|
|
rightMax[n-1] = height[n-1]
|
|
for i := n - 2; i >= 0; i-- {
|
|
rightMax[i] = max(rightMax[i+1], height[i])
|
|
}
|
|
|
|
for i, h := range height {
|
|
ans += min(leftMax[i], rightMax[i]) - h
|
|
}
|
|
return
|
|
}
|
|
|
|
func TestS7(t *testing.T) {
|
|
println(trap([]int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}))
|
|
// {4,2,0,3,2,5}
|
|
}
|