当青训营遇上码上掘金

159 阅读2分钟

当青训营遇上码上掘金!

这是我参加青训营以来,第一次体验在码上掘金体验敲代码的过程。

码上掘金这个平台非常方便,他以网页的形式运行,支持多种语言的编程,有足够的语法提示,能够在线运行写出来的代码,并且在终端显示结果。

这次活动有多个题目可以选择,我选择了攒青豆。

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

以下为上图例子的解析: 输入:height = [5,0,2,1,4,0,1,0,3] 输出:17

解析:上面是由数组 [5,0,2,1,4,0,1,0,3] 表示的柱子高度,在这种情况下,可以接 17 个单位的青豆。

对于这个题目,我想到的是一种比较直接的解法。

将柱子高度和柱子根数用一个二维数组表示,row表示柱子的高度,column表示有多少根柱子,将二维数组中有柱子占据的格子表示为1,没有的表示为0.

这样只需要逐行遍历二维数组,用几个嵌套循环,当一些格子的两边是1,即有柱子,中间是0,即可以放入豆子。计算这些格子的个数,即可求得可以放入的青豆树。

在这次活动中有许多收获:

  • 学习了go语言的输入输出语句,以及这些语句的格式化输出字符的方法。
  • 学习了二维数组的创建方法,这个题目里面的二维数组在程序运行前不能确定大小,所以要使用切片来创建。
  • 熟悉了go语言的for,if-else等基础语句的写法。
  • 在debug的过程中,发现了输出局部变量,打断点等方法都可以加快找到bug的速度。