「青训营 X 码上掘金」主题 4——攒青豆

37 阅读2分钟

当青训营遇上码上掘金

主题介绍

  • 主题 4:攒青豆

    现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积)

image.png

  • case

    • 输入是一个数组如: height = [5,0,2,1,4,0,1,0,3]
    • 输出:数字如 17
  • 直接遍历:

    • 利用从左往右的顺序,进行遍历,以题目为例,从下标0开始我们进行计数
    • 当下标等于0时,这只有柱子,左边高度为0,右边高度也为5。没有豆子
    • 当下标高度为1时,这是,左边最高高度为5,右边最高高度4。当前为0,可以接4个豆子
    • 当下标高度为2时,这是,左边最高高度为5,右边最高高度4。当前高度为2,可以接2个豆子
    • 当下标高度为3时,这是,左边最高高度为5,右边最高高度4。当前高度为1,可以接3个豆子
    • 当下标高度为4时,这是,左边最高高度为5,右边最高高度4。当前高度为4,可以接0个豆子
    • 当下标高度为5时,这是,左边最高高度为5,右边最高高度3。当前高度为0,可以接3个豆子
    • 当下标高度为6时,这是,左边最高高度为5,右边最高高度3。当前高度为1,可以接2个豆子
    • 当下标高度为7时,这是,左边最高高度为5,右边最高高度3。当前高度为0,可以接3个豆子

这时候我们只需要做到保存两个数组,分别存储两边最高的高度(动态变化的),此外要查询当前位置的高度,而每次指针移动,则是增加 min(左边的高度, 右边的高度) - 当前的高度。