36 lines
505 B
Go
36 lines
505 B
Go
package q42
|
|
|
|
func trap(height []int) int {
|
|
water := 0
|
|
mid := 0
|
|
|
|
// From left
|
|
maxHeight, stash := 0, 0
|
|
for i, h := range height {
|
|
if h >= maxHeight {
|
|
maxHeight = h
|
|
water += stash
|
|
stash = 0
|
|
mid = i
|
|
} else {
|
|
stash += maxHeight - h
|
|
}
|
|
}
|
|
|
|
// From right
|
|
maxHeight, stash = 0, 0
|
|
for i := len(height) - 1; i >= mid; i-- {
|
|
h := height[i]
|
|
if h >= maxHeight {
|
|
maxHeight = h
|
|
water += stash
|
|
stash = 0
|
|
} else {
|
|
stash += maxHeight - h
|
|
}
|
|
}
|
|
|
|
return water
|
|
}
|
|
|
|
var _ = trap
|