当青训营遇上码上掘金
现有n个宽度为的柱子,给出n个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算此排列柱子能接住多少青豆 (不考虑边角堆积)
package main
import (
"fmt"
)
func min(a, b int) int {
if a < b {
return a
} else {
return b
}
}
func main() {
// 接青豆
n := 0
fmt.Scan(&n)
h := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&h[i])
}
sum := 0
for i := 0; i < n-1; i++ {
left_max := -1
right_max := -1
for j := i - 1; j >= 0; j-- {
if h[j] > left_max {
left_max = h[j]
}
}
for j := i + 1; j < n; j++ {
if h[j] > right_max {
right_max = h[j]
}
}
min := min(left_max, right_max)
//5 0 2 1 4 0 1 0 3
if min > h[i] {
sum += (min - h[i])
}
}
fmt.Println(sum)
}