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