当青训营遇上码上掘金
现在要讲解的是码上掘金的主题4攒青豆的代码实现
思路:要想求按一定规则排列的柱子总共能攒多少青豆,我们可以按列拆分进行求解,求出每一列可以攒的青豆再进行加和就是总的青豆数。这时候我们需要关心的是当前我们正在求的列以及它的左边最高的柱子和右边最高的柱子就可以了。至于当前列所能攒的青豆数,我们可以根据木桶原理的短板效应可知,木桶中所能盛水的多少是由它的短板所决定的,同理,当前列所能攒的青豆数是由左右2端最高柱子的那个较低的那个柱子所决定的。
现在根据思路可以分为3种情况:
- 左右2端最高中较低的柱子>当前列柱子的高度
如上图所示,左右2端最高柱子中的较低的柱子是4号柱,那么当前列所能攒的青豆数=较低柱子的高度-当前柱子的高度,即4-1=3
-
左右2端最高中较低的柱子<当前列柱子的高度
如上图所示,此时左右2端最高柱子中的较低的柱子是左边柱,左柱小于当前列高度,当前列是不能攒到青豆的。(注意:当前题目要求是忽略边角堆积的)
-
左右2端最高中较低的柱子=当前列柱子的高度
如上图所示,和第二种情况一样,当前列也是不能接住青豆的。(注意:当前题目要求是忽略边角堆积的)
然后我们就可以按照我们的思路进行编写代码了,通过遍历数组的每一列,找到当前列左右2端最高的柱子,再找到较矮的那个柱子。当前列所能接到的青豆数=较低柱子的高度-当前柱子的高度。
最后附上代码如下图:
本文所给方法不是最佳解决方案,如有问题欢迎大家批评指正!