攒青豆

31 阅读1分钟

当青训营遇上码上掘金

现有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)
}